51CTO:也就这么回事,Kafka架构原理

【51CTO.com原创稿件】本文主要讲解Kafka是什么、Kafka的架构包括工作流程和存储机制 , 以及生产者和消费者 。
51CTO:也就这么回事,Kafka架构原理
文章图片
图片来自Pexels
最终大家会掌握Kafka中最重要的概念 , 分别是Broker、Producer、Consumer、ConsumerGroup、Topic、Partition、Replica、Leader、Follower , 这是学会和理解Kafka的基础和必备内容 。
定义
Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue) , 主要应用与大数据实时处理领域 。
消息队列
Kafka本质上是一个MQ(MessageQueue) , 使用消息队列的好处?(面试会问)
解耦:允许我们独立的扩展或修改队列两边的处理过程 。 可恢复性:即使一个处理消息的进程挂掉 , 加入队列中的消息仍然可以在系统恢复后被处理 。 缓冲:有助于解决生产消息和消费消息的处理速度不一致的情况 。 灵活性&峰值处理能力:不会因为突发的超负荷的请求而完全崩溃 , 消息队列能够使关键组件顶住突发的访问压力 。 异步通信:消息队列允许用户把消息放入队列但不立即处理它 。发布/订阅模式
51CTO:也就这么回事,Kafka架构原理
文章图片
一对多 , 生产者将消息发布到Topic中 , 有多个消费者订阅该主题 , 发布到Topic的消息会被所有订阅者消费 , 被消费的数据不会立即从Topic清除 。
架构
51CTO:也就这么回事,Kafka架构原理
文章图片
Kafka存储的消息来自任意多被称为Producer生产者的进程 。 数据从而可以被发布到不同的Topic主题下的不同Partition分区 。
在一个分区内 , 这些消息被索引并连同时间戳存储在一起 。 其它被称为Consumer消费者的进程可以从分区订阅消息 。
Kafka运行在一个由一台或多台服务器组成的集群上 , 并且分区可以跨集群结点分布 。
下面给出Kafka一些重要概念 , 让大家对Kafka有个整体的认识和感知 , 后面还会详细的解析每一个概念的作用以及更深入的原理:
Producer:消息生产者 , 向KafkaBroker发消息的客户端 。 Consumer:消息消费者 , 从KafkaBroker取消息的客户端 。 ConsumerGroup:消费者组(CG) , 消费者组内每个消费者负责消费不同分区的数据 , 提高消费能力 。 一个分区只能由组内一个消费者消费 , 消费者组之间互不影响 。 所有的消费者都属于某个消费者组 , 即消费者组是逻辑上的一个订阅者 。 Broker:一台Kafka机器就是一个Broker 。 一个集群由多个Broker组成 。 一个Broker可以容纳多个Topic 。 Topic:可以理解为一个队列 , Topic将消息分类 , 生产者和消费者面向的是同一个Topic 。 Partition:为了实现扩展性 , 提高并发能力 , 一个非常大的Topic可以分布到多个Broker(即服务器)上 , 一个Topic可以分为多个Partition , 每个Partition是一个有序的队列 。 Replica:副本 , 为实现备份的功能 , 保证集群中的某个节点发生故障时 , 该节点上的Partition数据不丢失 , 且Kafka仍然能够继续工作 , Kafka提供了副本机制 , 一个Topic的每个分区都有若干个副本 , 一个Leader和若干个Follower 。 Leader:每个分区多个副本的“主”副本 , 生产者发送数据的对象 , 以及消费者消费数据的对象 , 都是Leader 。 Follower:每个分区多个副本的“从”副本 , 实时从Leader中同步数据 , 保持和Leader数据的同步 。 Leader发生故障时 , 某个Follower还会成为新的Leader 。 Offset:消费者消费的位置信息 , 监控数据消费到什么位置 , 当消费者挂掉再重新恢复的时候 , 可以从消费位置继续消费 。 Zookeeper:Kafka集群能够正常工作 , 需要依赖于Zookeeper , Zookeeper帮助Kafka存储和管理集群信息 。工作流程