5.14.1 Kafka 基本原理
Kafka是一个分布式的、分区的、多副本的消息发布-订阅系统,它提供了类似于JMS 的特性,但在设计上完全不同,它具有消息持久化、高吞吐、分布式、多客户端支
持、实时等特性,适用于离线和在线的消息消费,如常规的消息收集、网站活性跟 踪、聚合统计系统运营数据(监控数据)、日志收集等大量数据的互联网服务的数据 收集场景。
Kafka 结构
生产者(Producer)将消息发布到Kafka主题(Topic)上,消费者(Consumer)订阅 这些主题并消费这些消息。在Kafka集群上一个服务器称为一个Broker。对于每一个主 题,Kafka集群保留一个用于缩放、并行化和容错性的分区(Partition)。每个分区是 一个有序、不可变的消息序列,并不断追加到提交日志文件。分区的消息每个也被赋 值一个称为偏移顺序(Offset)的序列化编号。
图5-63 Kafka 结构
表5-15 Kafka 结构图说明
名称 说明
Broker 在Kafka集群上一个服务器称为一个Broker。
Topic/主题 一个Topic就是一个类别或者一个可订阅的条目名称,也即一类消 息。一个主题可以有多个分区,这些分区可以作为并行的一个单 元。
Partition/分区 是一个有序的、不可变的消息序列,这个序列可以被连续地追加
—个提交日志。在分区内的每条消息都有一个有序的ID号,这个 ID号被称为偏移(Offset),这个偏移量可以唯一确定每条消息 在分区内的位置。
Producer/生产
者 向Kafka的主题发布消息。
Consumer/消费
者 向Topic订阅,并且接收发布到这些Topic的消息。
各模块间关系如图5-64所示。
图5-64 Kafka 模块间关系
消费者使用一个消费者组名称来标记自己,主题的每个消息被传递给每个订阅消费者 组中的一个消费者。如果所有的消费者实例都属于同样的消费组,它们就以传统队列 负载均衡方式工作。如上图中,Consumer1与Consumer2之间为负载均衡方式;
Consumer3、Consumer4、Consumer5与Consumer6之间为负载均衡方式。如果消费 者实例都属于不同的消费组,则消息会被广播给所有消费者。如上图中,Topic1中的 消息,同时会广播到Consumer Group1与Consumer Group2中。
关于Kafka架构和详细原理介绍,请参见:https://kafka.apache.org/24/
documentation.html。
Kafka 原理
● 消息可靠性
Kafka Broker收到消息后,会持久化到磁盘,同时,Topic的每个Partition有自己 的Replica(备份),每个Replica分布在不同的Broker节点上,以保证当某一节点 失效时,可以自动故障转移到可用消息节点。
● 高吞吐量
Kafka通过以下方式提供系统高吞吐量:
– 数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的 顺序读写性能。
– Zero-copy:减少IO操作步骤。
– 数据批量发送:提高网络利用率。
– Topic划分为多个Partition,提高并发度,可以由多个Producer、Consumer 数目之间的关系并发来读、写消息。Producer根据用户指定的算法,将消息 发送到指定的Partition。
● 消息订阅-通知机制
消费者对感兴趣的主题进行订阅,并采取pull的方式消费数据,使得消费者可以根 据其消费能力自主地控制消息拉取速度,同时,可以根据自身情况自主选择消费
模式,例如批量、重复消费,从尾端开始消费等;另外,需要消费者自己负责维 护其自身消息的消费记录。
● 可扩展性
当在Kafka集群中可通过增加Broker节点以提供更大容量时。新增的Broker会向 ZooKeeper注册,而Producer及Consumer会及时从ZooKeeper感知到这些变化,
并及时作出调整。
Kafka 开源特性
● 可靠性
提供At-Least Once,At-Most Once,Exactly Once消息可靠传递。消息被处理的 状态是在Consumer端维护,需要结合应用层实现Exactly Once。
● 高吞吐
同时为发布和订阅提供高吞吐量。
● 持久化
将消息持久化到磁盘,因此可用于批量消费,以及实时应用程序。通过将数据持 久化到硬盘以及replication防止数据丢失。
● 分布式
分布式系统,易于向外扩展。所有的Producer、Broker和Consumer都支持部署多 个形成分布式的集群。无需停机即可扩展系统。
5.14.2 Kafka 与其他组件的关系
Kafka作为一个消息发布-订阅系统,为整个大数据平台多个子系统之间数据的传递提 供了高速数据流转方式。可以实时接受来自外部的消息,并提供给在线以及离线业务 进行处理。具体的关系如下图所示:
图5-65 与其他组件关系
5.14.3 Kafka 开源增强特性
Kafka 开源增强特性
● 支持监控如下Topic级别的指标:
– Topic输入的字节流量 – Topic输出的字节流量 – Topic拒绝的字节流量
– Topic每秒失败的fetch请求数 – Topic每秒失败的Produce请求数 – Topic每秒输入的消息条数 – Topic每秒的fetch请求数 – Topic每秒的produce请求数
● 支持查询Broker ID与节点IP的对应关系。在Linux客户端下,使用kafka-broker-info.sh查询Broker ID与节点IP的对应关系。