在这篇文章中,我们将一起学习Apache Kafka的架构,ZooKeeper扮演的角色等等。
目标
在这个文章中,我们将学习Kafka基础知识、Kafka交付语义和配置,以实现不同的语义、激发Kafka集成和优化。在本系列的第1部分中,让我们理解Kafka的基本原理。在本系列的第2部分中,我们将进一步了解Kafka Producer及其配置的更多信息。
问题陈述
许多源和目标系统需要集成。通常,许多系统的集成涉及复杂的问题,比如处理许多协议、消息格式等。
消息系统处理高容量流。
用例
流处理
跟踪用户活动,日志聚合等
去耦系统
什么是Kafka?
Kafka是一个可水平扩展,容错,快速的消息传递系统。它是一个pub-sub模型,各种生产者和消费者可以在其中进行书写和阅读。它将源系统和目标系统分离。一些关键功能是:
扩展到数百个节点。
每秒可以处理数百万条消息。
实时处理(~10ms)。
关键术语
主题,分区和偏移
主题是特定的数据流。它与NoSQL数据库中的表非常相似。与NoSQL数据库中的表一样,该主题被拆分为分区,使主题能够分布在各个节点上。与表中的主键一样,主题具有每个分区的偏移量。您可以使用其主题,分区和偏移量唯一标识消息。
分区
分区使主题可以在群集中分布。分区是水平可伸缩性的并行度单位。一个主题可以跨节点进行多个分区扩展。
消息根据分区键分配给分区; 如果没有分区键,则随机分配该分区。使用正确的密钥来避免热点非常重要。
分区中的每个消息都被分配一个称为偏移量的增量ID。每个分区的偏移量是唯一的,消息只在分区内排序。写入分区的消息是不可变的。
Kafka架构图
ZooKeeper
ZooKeeper是一种用于管理分布式系统的集中式服务。它为其管理的分布式系统提供分层键值存储,配置,同步和名称注册服务。ZooKeeper充当集合层(将事物联系在一起)并确保Kafka集群的高可用性。Kafka节点也称为代理。重要的是要理解Kafka在没有ZooKeeper的情况下无法工作。
从ZooKeeper节点列表中,其中一个节点被选为领导者,其余节点跟随领导者。在ZooKeeper节点发生故障的情况下,其中一个关注者被选为领导者。强烈建议使用多个节点以实现高可用性,不建议使用超过7个节点。
ZooKeeper存储元数据和Kafka集群的当前状态。例如,主题名称,分区数量,复制,请愿的领导者详细信息以及消费者组详细信息等详细信息存储在ZooKeeper中。您可以将ZooKeeper视为项目经理,他负责管理项目中的资源并记住项目的状态。
关键事项:
管理经纪人名单。
当经纪人破产时选举经纪人领导。
发送有关新代理、新主题、已删除主题、丢失代理等的通知。
从Kafka0.10开始,消费者偏移不存储在ZooKeeper中,只有集群的元数据存储在ZooKeepr中。
ZooKeepr中的领导者处理所有写入和跟随者ZooKeepr只处理读取。
Broker
一个broker是由ZooKeeper管理的单个Kafka节点。一组brokers组成了Kafka集群。在Kaka中创建的主题基于分区,复制和其他因素分布在broker中。当broker节点基于ZooKeeper中存储的状态失败时,它会自动重新平衡群集,如果领导分区丢失,则其中一个跟随者请求被选为领导者。
您可以将broker视为负责分配任务的团队负责人。如果团队负责人不可用,那么经理负
责将任务分配给其他团队成员。
复制
复制正在另一个代理中提供分区的副本。复制使Kafka具有容错能力。当主题的分区在
多个代理中可用时,代理中的一个分区被选为领导者,而分区的其余复制是跟随者。
复制使Kafka即使在代理关闭时也具有容错能力。例如,主题B分区0存储在代理0和代理1中。生产者和消费者都只由领导者提供服务。在代理失败的情况下,来自另一个代理的分区被选为领导者,并且它开始为生产者和消费者群体提供服务。与领导同步的副本分区标记为ISR(同步副本)。
IT团队和Kafka集群类比
下图描绘了IT团队和Kafka集群的类比。
摘要
以下是Kafka核心组件的摘要。
ZooKeeper管理Kafka经纪人及其元数据。
代理是可水平扩展的Kafka节点,包含主题和复制。
主题是具有一个或多个分区的消息流。
分区包含每个分区具有唯一偏移量的消息。
复制使Kafka能够使用跟随分区进行容错。
看了这篇文章,您有什么收获吗?
长按二维码 ▲
订阅「架构师小秘圈」公众号
如有启发,帮我点个在看,谢谢↓