消息队列Kafka篇续 | 青训营笔记

65 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天


本堂课主要内容是消息队列,下面是我个人听课时的一些笔记。本文是上一篇笔记的续篇,主要关于Kafka中一条消息的生产消费流程,以及Kafka的一些好的特性。

个人笔记

Kafka

  • 一条消息的“自述”:

    Producer→Broker→Consumer

    • Producer批量发送消息(Batch)

      批量发送可以减少IO次数,从而加强发送能力

      增大吞吐

    • Producer数据压缩

      通过压缩,减少消息大小,降低带宽流量,以应对可能出现的网络带宽不足的问题。目前支持Snappy、 Gzip、LZ4、ZSTD压缩算法

    • Broker采用顺序写(末尾追加)的方式进行写入,以提高写入效率

    • Broker消息索引(稀疏索引)

      寻找消息的机制

    • Broker零拷贝:

      减少拷贝次数,加快消息数据传输速度

      Consumer从Broker中读取数据,通过sendfile的方式, 将磁盘读到os内核缓冲区后,直接转到NIC buffer进行网络发送 Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入(从用户态直接写入磁盘,不用再写内核态,减少内存拷贝次数)

    • Consumer的rebalance(关于Consumer如何分配Partition

      背景是Consumer可以并发消费Partition,那么一个Consumer要如何确定自己该消费哪个Partition呢?

      (Low Level)手动分配:在启动consumer的时候预先设定好该consumer会消费的partition;优点是快,但是这样有许多弊端,不能容灾,且不够灵活

      (High Level)自动分配:对于不同的Consumer Group来讲,都会在Broker集群中选取一台Broker当做Coordinator,而Coordinator的作用就是帮助Consumer Group进行分片的分配,也叫做分片的rebalance,使用这种方式,如果ConsumerGroup中有发生宕机,或者有新的Consumer加入,整个partition和Consumer都会重新进行分配来达到一个稳定的消费状态

    总结:可以帮助Kafka提高吞吐或者稳定性的功能? Producer:批量发送、数据压缩 Broker:顺序写,消息索引,零拷贝 Consumer:Rebalance

参考

  • 字节内部课 —【走进消息队列】