李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
05.Kafka架构和工作流程
Leefs
2021-08-26 AM
1376℃
0条
# 05.Kafka架构和工作流程 ### 一、基础架构 ![05.Kafka架构和工作流程01.png](https://lilinchao.com/usr/uploads/2021/08/3472254359.png) #### 说明 **生产者** **Producer A、Producer B**用来生产消息(消息既数据) **Kafka集群(Kafka Cluster)** **Kafka Cluster**是用来暂存消息; **Broker 1、Broker 2、Broker 3**启动了Kafka进程的三台服务器,组成了一个Kafka集群; **Topic A、Topic B**是Kafka当中的主题,对Kafka中的消息做一个分类,目的是为了生产者和消费者在生产和消费消息时不会产生混乱; **Partition 0、Partition 1**分区目的是提高Topic的负载能力,提高并发 **Leader**针对当前分区的Leader,生产者生产消息和消费者消费消息都是通过和Leader分区进行交互 **Follower**仅仅对数据进行备份,提高可靠性,和Leader不在同一台机器上 **消费者** **Consumer group**消费者组,一个消费者组当中可以有多个消费者,提高消费能力 **Consumer A、Consumer B**同一个消费者组中的两个不同的消费者 **一个分区中的数据只能被同一个消费者组里面的某一个消费者所消费**(同一个消费者组里面的不同消费者不能够去消费同一个分区中的数据) **当消费者组中的消费者个数和分区数相等时,并发度最高** **Zookeeper** Zookeeper帮助Kafka集群存储和管理集群信息以及存储0.9版本之前消费者消费到的位置信息。 0.9版本及之后消费者消费的位置信息存储在Kafka当中,减少了消费者和Zookeeper之间的交互,提高性能。 #### 相关概念 + **Producer** 消息生产者,将消息push到Kafka集群中的Broker。 + **Consumer** 消息消费者,从Kafka集群中pull消息,消费消息。 + **Consumer Group** 消费者组,由一到多个Consumer组成,每个Consumer都属于一个Consumer Group。消费者组在逻辑上是一个订阅者。 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。 即每条消息只能被Consumer Group中的一个Consumer消费;但是可以被多个Consumer Group组消费。这样就实现了单播和多播。 + **Broker** 一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,每个Broker可以容纳多个Topic. + **Topic** 消息的类别或者主题,逻辑上可以理解为队列。Producer只关注push消息到哪个Topic,Consumer只关注订阅了哪个Topic。 + **Partition** 负载均衡与扩展性考虑,一个Topic可以分为多个Partition,物理存储在Kafka集群中的多个Broker上。可靠性上考虑,每个Partition都会有备份Replica。 + **Replica** Partition的副本,为了保证集群中的某个节点发生故障时,该节点上的Partition数据不会丢失,且Kafka仍能继续工作,所以Kafka提供了副本机制,一个Topic的每个Partition都有若干个副本,一个Leader和若干个Follower。 + **Leader** Replica的主角色,Producer与Consumer只跟Leader交互。 + **Follower** Replica的从角色,实时从Leader中同步数据,保持和Leader数据的同步。Leader发生故障时,某个Follower会变成新的Leader。 + **Controller** Kafka集群中的其中一台服务器,用来进行Leader election以及各种Failover(故障转移)。 + **ZooKeeper** Kafka通过Zookeeper存储集群的meta等信息。 ### 二、工作流程 Kafka集群将 Record 流存储在称为 Topic 的类别中,每个记录由一个键、一个值和一个时间戳组成。 ![05.Kafka架构和工作流程02.png](https://lilinchao.com/usr/uploads/2021/08/2625303812.png) Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic 的。 topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文 件,该 log 文件中存储的就是 producer 生产的数据。Producer 生产的数据会被不断追加到该 log 文件末端,且每条数据都有自己的offset。消费者组中的每个消费者,都会实时记录自己 消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费。 *附:* *参考文章链接:http://www.dockone.io/article/9956*
标签:
Kafka
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1398.html
上一篇
04.Kafka安装教程
下一篇
01.Quartz介绍
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
数据结构和算法
Hbase
JavaWeb
Azkaban
Thymeleaf
设计模式
字符串
持有对象
并发编程
Java
Git
Netty
Python
Sentinel
Shiro
RSA加解密
Spark
Elastisearch
Golang
工具
Beego
FastDFS
LeetCode刷题
Hive
nginx
序列化和反序列化
SpringBoot
Golang基础
Hadoop
SpringCloud
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞