生产者
生产者发送确认机制
- 半数follower响应
- 全部follower响应–>改进:ISR机制:in-sync-replica set【挑选进入isr的follower规则:1、同步的时间 2、和leader相差的条数(0.9版本中被去掉)】
注意:isr中的follower和正常的follower的概念问题
acks配置
0:发送完就返回。At most once
1:只等待leader写完就返回。
-1:leader和follower都写完返回,会有数据重复问题(当主leader挂了,follower同步完成,ack未返回的情况)。 At least once
Exactly once
At least once + 幂等性 = Exactly once
幂等性:1的多少次方都是1,无论发送方发送多少重复的数据,只会有一份数据持久化(类似于set机制)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x6FgYJpg-1637484715573)(/Users/tjc/Library/Application Support/typora-user-images/image-20211114162036081.png)]
消费一致性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RtepktvZ-1637484715575)(/Users/tjc/Library/Application Support/typora-user-images/image-20211114160617843.png)]
hw解决的是消费和存储一致性问题,并不能决定数据丢失和重复的问题(由ack决定)
消费者
消费者组的注意点
- 消费者组的消费者不能消费同一个分区
消费者组作用
提供的可扩展且具有容错性的消费者机制
理想情况下,Group中的Consumer实列的数量应该等于该Group订阅主题的总分区数。
分区分发策略
- 轮询(RoundRange):按消费者组划分 问题:消费者组中的消费者订阅不同主题,消费数据会有问题
- Range:range 策略主要是基于范围的思想。它将单个 topic 的所有分区 按照顺序排列,然后把这些分区划分成固定⼤⼩的分区段并依次分配给每个 consumer; 问题:消费者主消费不均衡问题
分区rebanlance触发条件
offset:
topic+partition+group
kafka高效写数据
- 顺序写磁盘
- 零拷贝技术
- 多个分区、并发读取
**关于partition的分配,还有leader的选举,总得有个执行者。在kafka中,这个执行者就叫controller。**kafka使用zk在broker中选出一个controller,用于partition分配和leader选举。