【Kafka】二.Kafka消息发布/消费流程

Kafka支持消息的一写多读,通过消费组和分区管理实现。生产者可使用同步、异步或oneway模式发送消息,消费者按组消费,每个分区在组内由唯一消费者消费。Kafka的GroupCoordinator管理分区分配,且在ZK中保存消费偏移量以确保消息不重复消费。当Consumer线程数超过分区数时,部分线程无法读取数据。
摘要由CSDN通过智能技术生成

Kafka 通过对消费方进行分组管理来支持消息一写多读。
我画的图:工具(processon在线画图)
在这里插入图片描述
这个 Topic 分为 4 个 Partition,就是图中的 P1到 P4,上部的生产方根据规则选择一个 Partition 进行写入,默认规则是轮询策略。也可以由生产方指定 Partition 或者指定 key 来根据 Hash 值选择 Partition。

消息的发送有三种方式:同步、异步以及 oneway。

  • 同步模式下后台线程中发送消息时同步获取结果,这也是默认模式。
  • 异步的模式允许生产者批量发送数据,可以极大的提高性能,但是会增加丢失数据的风险。
  • oneway 模式只发送消息不需要返回发送结果,消息可靠性最低,但是低延迟、高吞吐,适用于对可靠性要求不高的场景。

来看消息的消费,Consumer 按照 Group 来消费消息,Topic 中的每一条消息可以被多个 Consumer Group 消费,如上图中的 GroupA 和 GroupB。

Kafka 确保每个 Partition 在一个 Group 中只能由一个 Consumer 消费。

Kafka 通过 Group Coordinator 来管理 Consumer 实际负责消费哪个 Partition,默认支持 Range 和轮询分配。

Kafka 在 ZK 中保存了每个 Topic 中每个 Partition 在不同 Group 的消费偏移量 offset,通过更新偏移量保证每条消息都被消费。

注意:用多线程来读取消息时,一个线程相当于一个 Consumer 实例。当 Consumer 的数量大于分区的数量的时候,有的Consumer 线程会读取不到数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞四海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值