Kafka基本原理

Kafka原理介绍

Kafka原理介绍

  • Kafka结构
  • 生产者(Producer)将消息发布到Kafka主题(Topic)上,消费者(Consumer)订阅这些主题并消费这些消息。在Kafka集群上一个服务器称为一个Broker。对于每一个主题,Kafka集群保留一个用于缩放、并行化和容错性的分区(Partition)。每个分区是一个有序、不可变的消息序列,并不断追加到提交日志文件。分区的消息每个也被赋值一个称为偏移顺序(Offset)的序列化编号。

    各模块功能介绍如下:

    Broker

    在Kafka集群上一个服务器称为一个Broker。

    Topic/主题

    一个Topic就是一个类别或者一个可订阅的条目名称,也即一类消息。一个主题可以有多个分区,这些分区可以作为并行的一个单元。

    Partition/分区

    是一个有序的、不可变的消息序列,这个序列可以被连续地追加—个提交日志。在分区内的每条消息都有一个有序的ID号,这个ID号被称为偏移(Offset),这个偏移量可以唯一确定每条消息在分区内的位置。

    Producer/生产者

    向Kafka的主题发布消息。

    Consumer/消费者

    向Topic订阅,并且接收发布到这些Topic的消息。

  • Kafka原理
  • 消息可靠性

    Kafka Broker收到消息后,会持久化到磁盘,同时,Topic的每个Partition有自己的Replica(备份),每个Replica分布在不同的Broker节点上,以保证当某一节点失效时,可以自动故障转移到可用消息节点。

    高吞吐量

    Kafka通过以下方式提供系统高吞吐量:

    1、数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能。

    2、Zero-copy:减少IO操作步骤。

    3、数据批量发送:提高网络利用率。

    4、Topic划分为多个Partition,提高并发度,可以由多个Producer、Consumer数目之间的关系并发来读、写消息。Producer根据用户指定的算法,将消息发送到指定的Partition。

    消息订阅-通知机制

    消费者对感兴趣的主题进行订阅,并采取pull的方式消费数据,使得消费者可以根据其消费能力自主地控制消息拉取速度,同时,可以根据自身情况自主选择消费模式,例如批量、重复消费,从尾端开始消费等;另外,需要消费者自己负责维护其自身消息的消费记录。

    可扩展性

    当在Kafka集群中可通过增加Broker节点以提供更大容量时。新增的Broker会向ZooKeeper注册,而Producer及Consumer会及时从ZooKeeper感知到这些变化,并及时作出调整。

Kafka开源增强特性

  • 支持监控Topic级别的指标

    支持监控Topic级别的指标包括:Topic输入的字节流量、Topic输出的字节流量、Topic拒绝的字节流量、Topic每秒失败的fetch请求数、Topic每秒失败的Produce请求数、Topic每秒输入的消息条数、Topic每秒的fetch请求数和Topic每秒的produce请求数。

    支持监控Topic级别的指标包括:Topic输入的字节流量、Topic输出的字节流量、Topic拒绝的字节流量、Topic每秒失败的fetch请求数、Topic每秒失败的Produce请求数、Topic每秒输入的消息条数、Topic每秒的fetch请求数和Topic每秒的produce请求数。

  • 支持查询Broker ID与节点IP的对应关系

    在Linux客户端下,使用kafka-broker-info.sh查询Broker ID与节点IP的对应关系。

    在Linux客户端下,使用kafka-broker-info.sh查询Broker ID与节点IP的对应关系。