Kafka 题

2021-06-29  本文已影响0人  水木共美

1、kafka的设计

消息的生产者producer
消息的消费者consumer
kafka服务节点broker
kafka消息类型 topic
每个topic可以有多个分区 partition
每个topic的分区都有备份 replication
消费者组 consumer group
每个分区和其多个备份间 leader follower

2、ZooKeeper在Kafka中的作用

3、Kafka消息如何保证消费的顺序性

4、如何保证消息的不丢失

生产者有个参数acks设置
0 标识只管发送,不用等待response,性能高,吞吐强
1 标识leader写入完成就返回,不需要等待ISR 吞吐量高 默认值
-1或者all 标识需要等待leader写入完成和ISR副本备份完成,才返回。 吞吐量低

消费者 设置是否自动提交
enable.auto.commit
consumer是批量拉取消息的,自动提交开启,会在拉取到消息后就立马提交offset,不管消息是否已经都消费了
关闭后,你可以在每次消费完当前消息就提交当前消息的offset,可以确保不丢失消费消息

5、Kafka如何加快消息消费速度

6、Kafka如何加快生产

producer 需要设置批量发送,减少网络开销。
batch.size 消息达到多少时(字节数,不是条数),触发一次发送
linger.ms 缓存时间超过多少时,触发一次发送

如果消息设置了key,默认情况producer会根据key的hash值选取分区发送,而如果没有设置key,默认是轮训分区发送到每个分区
无key的情况下,很容易造成消息分散,batch发送无法达成。针对这个情况出现了粘性分区策略,也即某个短时间内的消息都发到一个分区上,过了这个时间段,然后换个分区。轮训的时间段版本

7、Kafka消费者语义at least once,如何处理重复消费问题

发送消息时,传入key作为唯一流水ID
消费消息时,判断是否已经已经消费过该ID消息
业务上做幂等

8、Kafka ISR机制

in sync replicate
这些机制都是针对acks=0或者1的情况

follower与leader不同步的原因:

replica.lag.max.messages 落后消息数大余这个值时,剔除出ISR列表,适合上诉场景的1
该参数已经被删除了,原因是这个值的设置需要根据具体业务数据量进行设置,而这个设置值是全局的,针对所有topic的。如果设置值过大,相当于无效设置,如果设置值过小,会导致不断触发剔除与加入,性能降低。
replica.lag.time.max.ms 超过这个时间没向leader请求数据FetchRequest,剔除出ISR列表。适合剔除上诉场景的2,3

9、Kafka文件存储机制 吞吐量为啥大

题外:

Kafka文件存储
一个topic可以分多个partition存储到不同的broker,一个partition由多个segment组成,每个segment有.index和.log文件组成。segment的文件名由起始的offset定义,第一个segment文件从0开始。 .index 文件存储元数据,如(3,349)标识这个segment中的第3条消息在.log文件的物理偏移位置是349,


image.png

示例:查找offset为368776的消息
1、通过文件名列表排序后进行二分查找,定位到该消息在00000000000000368769.index|log这个segment中,
2、通过368769.index文件查找第7条元数据,定位到消息在.log中的偏移量,然后对368769.log文件进行顺序查找,找到该偏移量处的消息
.index这个文件 叫稀疏索引存储 降低索引文件存储空间占用

吞吐量高的原因:

// 将当前 FileChannel 的字节传输到给定的可写 channel 中
public abstract long transferTo(long position, long count,  WritableByteChannel target) throws IOException;
// 将一个可读 channel 的字节传输到当前 FileChannel中
public abstract long transferFrom(ReadableByteChannel src, long position, long count) throws IOException;
// 对 Channel 做 mmap 映射
public abstract MappedByteBuffer map(MapMode mode, long position, long size) throws IOException;

10、kafka消费分区策略

11、消息队列

优点:解耦、异步、削峰
缺点:系统复杂性增加 (如一致性,重复消费,消息丢失等)、系统可用性降低

上一篇 下一篇

猜你喜欢

热点阅读