(九)kafka面试问题汇总

kafka面试问题汇总

1:kafka的配置如何

数据盘:6块8T的数据盘,由12块raid1组成。
内存256G。

2:kafka的吞吐量为什么高

包括生产者和消费者两面优势

2.1生产者方面

1:顺序读写
topic以分区partition存放,每条消息都有一个偏移量,每个partition是一个文件存放在硬盘上。所以写入时消息是根据偏移量不断追加到文件中的。不需要硬盘磁头的寻道时间,所以速度远快于随机读写,甚至和内存读写媲美。缺点就是不允许删除消息。
所以为了避免存储压力:Kakfa提供了两种策略来删除数据。一是基于时间,二是基于partition文件大小。具体配置可以参看它的配置文档。
2:内存mmap技术:同步异步发送
操作系统会在程序主动调用flush的时候才把数据真正的写到硬盘。Kafka提供了一个参数——producer.type来控制是不是主动flush,如果Kafka写入到mmap之后就立即flush然后再返回Producer叫同步(sync);写入mmap之后立即返回Producer不调用flush叫异步(async)
3:数据压缩
Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩。 压缩的好处就是减少传输的数据量,减轻对网络传输的压力,但是增加了消费端的cpu压力,但是对于kafka,cpu压力高不值一提。

2.2消费者方面

1:零拷贝(zero-copy)
调用系统的sendfile函数,根据消费者传递过来的偏移量读取指定内容的数据返回给消费者,大大减少数据复制。

3:Kafka中的消息是否会丢失和重复消费?

要确定Kafka的消息是否丢失或重复,从两个方面分析入手:生产和消费。

1、生产
配置request.required.acks属性来确认消息的生产方式:

0---表示不进行消息接收是否成功的确认;不和Kafka集群进行消息接收确认,则当网络异常、缓冲区满了等情况时,消息可能丢失;
1---表示当Leader接收成功时确认;同步模式下,只有Leader确认接收成功后但挂掉了,副本没有同步,数据可能丢失;
-1---表示Leader和Follower都接收成功时确认;不会丢失

2、消费
消息丢失:消息偏移量提交但是还没有消费就失败了
消息重复:消费成功了但是偏移量提交失败

4:producer如何优化速度

增加线程
提高 batch.size
增加更多 producer 实例
增加 partition 数
增加log.dir数据写入路径,多磁盘写入
设置 acks=-1 时,如果延迟增大:可以增大 num.replica.fetchers(follower 同步数据的线程数)来调解;

5:kafka的优点

易扩展
高吞吐量
消息易于消费管理

你可能感兴趣的:(kafka专栏)