IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> kafka主题创建流程 -> 正文阅读

[大数据]kafka主题创建流程

创建主题流程分析

创建主题包括2个阶段
1、客户端创建,就是客户端将主题得元数据写入zk
2、服务端得创建,是服务端控制器创建主题得过程。
客户端创建主题
可以通过kafka的api客户端或者是命令行来创建主题,底层都是调用了TopicCommand.createTopic(zkUtils: ZkUtils, ops:TopicCommandOptions)方法创建主题。该方法的主题流程是,首先是对主题和相关的配置信息进行校验,然后进行分区副本分配。最后在zk的/brokers/topics/路径下创建节点,将分区副本分配方案写入每个分区节点之中。
在这里插入图片描述
对主题校验:主题名字由长度不超过 249 个字母、数字、着重号(. )、下划线()、连接号()的字符组成, 正 则表达式为: “[a-zA-Z0-9\\._\\卡”,但不允许主题名字只有着重号(.)
分区副本分配。在创建主题的时候可以指定分区副本的分配方案,也可以使用默认的分区副本分配策略。
在 0.10 版本之后, Kafka 支持指定代理机架信息,如果指定了机架信息在副 本分配时会尽可能地让分区的副本分布到不同的机架上。
当创建一个主题成功的时候,物流是kafka的api还是命令行创建的,返回创建成功的时候,仅仅是在zk上创建/brokers/topics 节点成功创建了该主题对应的子节点成功,服务端的创建是交由控制器异步的去操作的。

服务端创建:
在控制器启动的时候会注册分区状态机和副本状态机,当代理成为控制器的时候就会回调onBecomingLeader()方法,这个方法会调用分区和副本的registerListeners()方法。分区状态机注册了监听zk的路径 的/brokers/topics 子节点的变化的 TopicChangeListener 监听 器用于监听主题及分区变化。副本状态机在 registerListeners()方法中会注册一 个 BrokerChangeListener 监昕器, 该监听器用于监听/brokers/ids 子节点的变化。当创建主题的时候会往/brokers/topics 写数据,这时两个状态机的监听就会触发执行。
TopicChangeListener监听器会调用handleChildChange()方法进行处理,该方法的具体处理逻辑如下:
(1)首先获取/brokers/topics节点下所有topic的列表例如为A,然后获取ControllerContext 中缓存的列表B ,集合A-B的差集C 标识为新增的topic,集合 B-A 差值为D 标识为删除的topic集合。
(2)用集合A更新ControllerContext缓存中的B
(3)遍历集合C ,获取集合中每个主题下的partions子节点,获取/brokers/topics/ topic-foo/partitons 下各分区副本分配信息,构造一个 Map[TopicAndPartition, Seq[Int]]集合, 以每个主题的每个分区 TopicAndPartition 对象作为 Key,以该分区的 AR 作为 Value。 同时从分 区副本分配信息中过滤掉集合 N 中所有主题对应的分区副本分配信息, 然后更新缓存中分区副 本分配信息。
(4) 调用控制器的 onNewTopicCreation()方法, 实 现真正创建主题的逻辑。onNewTopicCreation()方法操作步骤:
1、遍历集合C。通过分区状态机为每个新创建的主题向 ZooKeeper 注册一个监听分区变化 的监听器PartitionModificationsListener
2、调用控制器的 onNewPartitionCreation()方法创建分区。
具体操作步骤:调用分区状态机的 handleStateChangesO方法, 将新增主题的各分区状态设置为NewPartition 状态。
调用副本状态机的 handleStateChange()方法, 将新增主题的每个分区的副本状态设置 为 NewReplica 状态。
调用分区状态机的 handleStateChanges()方法 , 将新增主题的各分区状态设置为 OnlinePartition 状态,将各分区 AR 中第一个副本选为该分区的 Leader,将 AR 作为 JSR, 然后 创建各分区节点井写入该分区的详细元数据信息
3、调用副本状态机将新增主题的各分区的副本状态从 NewReplica 转换为 OnlineReplica 状态。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:16:45  更:2021-08-25 12:18:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:15:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码