首页 > 其他 > 详细

Kafka 消息生产过程

时间:2019-08-06 19:58:24      阅读:99      评论:0      收藏:0      [点我收藏+]

技术分享图片

  • 写入方式

    • producer 采用推(push)模式将消息发布到 broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障 kafka 吞吐率)

  • 分区(Partition)

    • 消息发送时都被发送到一个 topic,其本质就是一个目录,而 topic 是由一些 PartitionLogs(分区日志)组成,每个 Partition 中的消息都是有序的,生产的消息被不断追加到Partition log 上,其中的每一个消息都被赋予了一个唯一的 offset 值,其组织结构如下图所示:

      • 技术分享图片

         

    • 分区的原因

      • 方便在集群中扩展,每个 Partition 可以通过调整以适应它所在的机器,而一个topic 又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了

      • 可以提高并发,因为可以以 Partition 为单位读写

    • 分区的原则

      • 指定了 patition,则直接使用

      • 未指定 patition 但指定 key,通过对 key 的 value 进行 hash 出一个 patition

      • patition 和 key 都未指定,使用轮询选出一个 patition

  • 副本(Replication)

    • 同一个 partition 可 能 会 有 多 个 replication 。没有 replication 的情况下,一旦 broker 宕机,其上所有patition的数据都不可被消费,同时 producer 也不能再将数据存于其上的 patition。引入 replication 之后,同一个 partition 可能会有多个 replication,而这时需要在这些 replication 之间选出一个leader,producer 和 consumer 只与这个 leader 交互,其它 replication 作为 follower 从 leader中复制数据

  • 写入流程

     技术分享图片

     

    • producer 先从 zookeeper 的 "/brokers/.../state"节点找到该 partition 的 leader

    • producer 将消息发送给该 leader

    • leader 将消息写入本地 log

    • followers 从 leader pull 消息,写入本地 log 后向 leader 发送 ACK

    • leader 收到所有 ISR 中的 replication 的 ACK 后,增加 HW(high watermark,最后 commit的 offset)并向 producer 发送 ACK

Kafka 消息生产过程

原文:https://www.cnblogs.com/xiangyuguan/p/11311386.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!