kafka源码愫读(1)、总体架构

1、拓扑结构

kafka拓扑结构.png

2、基本组成

  • Broker:一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic,Broker和Broker之间没有Master和Standby的概念,他们之间地位是平等的;
  • Topic:每条发送到Kafka集群的消息都属于某个主题,这个主题就称为Topic。物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存在一个或多个Broker上,但是用户只需指定消息主题Topic即可生产或消费数据而不需要关心数据存放在何处;
  • Partition:为了实现可扩展性,一个非常大的Topic可以被分为多个Partition,从而分布到多台Broker上。Partition中的每条消息都会被分配一个自增Id(Offset)。Kafka只保证按照一个Partition中的顺序将消息发送给消费者,但是不保证单个Topic中多个Partition之间的顺序;
  • Offset:消息在Topic的Partition中的位置,同一个Partition中的消息随着消息的写入其对应的Offset也自增;
  • Replica:副本,Topic的Partition有N个副本,N为副本因子。其中一个Replica为Leader,其他都为Follower,Leader处理Partition的所有读写请求,Follower定期同步Leader上的数据;
  • Message:消息是通信的基本单位。每个Producer可以向一个Topic发布消息;
  • Producer:消息生产者,将消息发布到指定的Topic中,也能够决定消息所属的Partition:比如基于Round-Robin或者Hash算法;
  • Consumer:消息消费者,向指定的Topic获取消息,根据指定Topic的分区索引及其对应分区上的消息偏移量来获取消息;
  • Consumer Group:消费者组,每个消费者都属于一个组。当消费者具有相同组时,消息会在消费者之间负载均衡。一个Partition的消息只会被相同消费者组中的某个消费者消费。不同消费者组是相互独立的;
  • Zookeeper:存放Kafka集群相关元数据的组件。Zookeeper集群中保存了Topic的状态信息,例如分区个数、分区组成、分区的分布情况等;保存Broker的状态信息;保存消费者的消费信息等。通过这些信息,Kafka很好地将消息生产、消息存储、消息消费的过程结合起来;

3、zk节点说明

kafka的zk节点.png
  • topic注册信息:/brokers/topics/[topic],存储topic的partitions的所有信息;

示例:

{ "version": 1, "partitions": { "0": [1, 2], "1": [2, 1], "2": [1, 2] } }

  • partition状态信息:/brokers/topics/[topic]/partitions/[partitionId]/state,存储分区状态信息;

示例:

{ "controller_epoch": 1, "leader": 2, "version": 1, "leader_epoch": 0, "isr": [2, 1] }

  • broker注册信息:/brokers/ids/[0...N] ,每个broker都会对应一个全局的id,此节点为临时节点;

示例:

{ "jmx_port": 6061, "timestamp": "1403061899859", "version": 1, "host": "192.168.1.148", "port": 9092 }

  • ControllerEpoch信息:/controller_epoch,值为数字,每当主controller变更时,其对应的epoch就会增大;
  • Controller注册信息:/controller,存储主控制器所在的broker节点信息;

示例:

{ "version": 1, "brokerid": 3, "timestamp": "1403061802981" }

  • Consumer offset:/consumers/[groupId]/offsets/[topic]/[partitionId],用来跟踪每个Consumer所消费的分区的最大offset,此节点为持久化节点。
  • 删除的topic信息:/admin/delete_topics,需要删除的topic信息;

示例:

{ "version": 1, "topics": ["foo", "bar"] }

  • Topic配置信息:/config/topics/[topic_name]

示例:

{ "version": 1, "config": { "config.a": "x", "config.b": "y" } }

4、Broker模块

kafka的server模块.png

kafka集群一般由多个 broker 节点构成,Kafka 会从中选举一个 broker 节点作为 Leader 角色,并通过节点上运行的 KafkaController 组件控制整个集群中各个 broker 节点的协同运行,以统一对外提供服务。就单个 broker 节点而言,Kafka 会为节点绑定一个 Acceptor,用于接收来自客户端和其它 broker 节点的连接,Processor 组件会从这些连接中获取请求并交由 Handler 线程进行处理。Handler 基于 KafkaApis 组件解析具体的请求类型并分发给具体的组件,同时负责构造和发送响应结果。KafkaApis组件使用LogManager、ReplicaManager 和 GroupCoordinator等组件完成协议的处理。

  • SocketServer:首先开启一个Acceptor线程来监听9092端口,当有新连接建立成功时,会将对应的SocketChannel轮询交由Processor线程池中的某个线程处理。Processor线程会监听客户端网络上的的读写事件,当有读事件时,会读取数据并放入RequestChannel的请求队列;当有数据发送时,会从RequestChannel的相应队列读取并发送给客户端;
  • KafkaRequestHandlerPool:处理Socket读写请求的线程池,线程KafkaRequestHandler从RequestChannel的请求队列中获取请求,然后调用KafkaApis处理业务逻辑,最后将响应回写只RequestChannel中的响应队列,并最终交由SocketServer中的Processor线程发送给客户端;
  • LogManager:日志管理模块。提供日志文件管理,索引文件管理,删除过期数据及冗余数据、刷新脏数据、日志文件checkPoint等功能;
  • ReplicaManager:副本管理模块。提供Topic的副本分区管理,Leader及ISR状态管理,副本变更管理等;
  • OffsetManager:偏移量管理模块。提供对偏移量的管理功能;
  • GroupCoordinator:消费分组协调模块。主要提供对消费者分组内分区的分配管理,维护分组内消费偏移量等;
  • KafkaScheduler:后台任务资源调度模块。主要为LogManager、ReplicaManager、OffsetManager等提供定期的任务调用服务;
  • KafkaApis:kafka业务逻辑实现模块。根据不同的Request,利用LogManager、ReplicaManager、OffsetManager等来处理具体的业务逻辑。
  • KafkaHealthCheck:broker在/brokers/ids上注册自己的id,当broker上/下线的时候会在更新自己的id;
  • TopicConfigManager:在/config/changes上注册自己的回调函数来监测Topic配置信息的变更;
  • KafkaController:集群控制管理模块。集群元数据信息保存在zk上,此模块通过在不同的节点注册回调函数来达到监测集群状态的目的;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容