kafka生产者消费者

生产者

生产者发送确认机制

  1. 半数follower响应
  2. 全部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决定)

消费者

消费者组的注意点

  1. 消费者组的消费者不能消费同一个分区

消费者组作用

提供的可扩展且具有容错性的消费者机制

理想情况下,Group中的Consumer实列的数量应该等于该Group订阅主题的总分区数。

分区分发策略

  1. 轮询(RoundRange):按消费者组划分 问题:消费者组中的消费者订阅不同主题,消费数据会有问题
  2. Range:range 策略主要是基于范围的思想。它将单个 topic 的所有分区 按照顺序排列,然后把这些分区划分成固定⼤⼩的分区段并依次分配给每个 consumer; 问题:消费者主消费不均衡问题

分区rebanlance触发条件

offset:

topic+partition+group

kafka高效写数据

  1. 顺序写磁盘
  2. 零拷贝技术
  3. 多个分区、并发读取

**关于partition的分配,还有leader的选举,总得有个执行者。在kafka中,这个执行者就叫controller。**kafka使用zk在broker中选出一个controller,用于partition分配和leader选举。

上一篇:关于GitHub 服务中断 24 小时 11 分钟事故


下一篇:技术部如何做复盘——“年终盘点一对一”之开悟的杠精