def createTopic(zkUtils: ZkUtils, opts: TopicCommandOptions) { val topic = opts.options.valueOf(opts.topicOpt) val configs = parseTopicConfigsToBeAdded(opts) if (Topic.hasCollisionChars(topic)) println("WARNING: Due to limitations in metric names, topics with a period ('.') or underscore (...
controller.onNewTopicCreation(newTopics, addedPartitionReplicaAssignment.keySet.toSet) 订阅新增topic的分区变动事件 // subscribe to partition changes 注册指定topic的分区变动事件监听器 topics.foreach(topic => partitionStateMachine.registerPartitionChangeListener(topic)) 处理新增分区onNewPartitionCreation 该方法主...
if(newTopics.size>0)//进入具体的操作controller.onNewTopicCreation(newTopics,addedPartitionReplicaAssignment.keySet.toSet) 订阅新增topic的分区变动事件 代码语言:js 复制 // subscribe to partition changes 注册指定topic的分区变动事件监听器topics.foreach(topic=>partitionStateMachine.registerPartitionChangeListener...
1.获得zk下新的topic列表,与当前缓存的列表相比对,确定新增的topic,更新controller缓存的topic列表 2.从/brokers/topics/${topic}节点中取出topic所有分区的副本分配方案,再更新controller对应的部分信息 3.调用onNewTopicCreation开始创建topic,注册分区变更监听器(PartitionModificationListener),再调用onNewPartitionCreation...
然后获取新创建topic的tp的assignment,并更新controllerContext.partitionReplicaAssignment,至于为什么要更新这个值,后面会介绍,暂且记作mark1吧。然后就是调用onNewTopicCreation。 1def onNewTopicCreation(topics: Set[String], newPartitions: Set[TopicAndPartition]) {2info("New topic creation callback for %s"....
接下来肯定是执行TopicCommand 类,对应参数--create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic topic 。这是一个创建create请求,对应服务端地址是localhost:9092,副本因子是3,分区数是3,topic名称是topic。TopicCommand核心类如下: ...
kafka-topics.sh实际上是调用kafka.admin.TopicCommand的方法来创建 topic,其实现如下: //note: 创建 topic def createTopic(zkUtils: ZkUtils, opts: TopicCommandOptions) { val topic = opts.options.valueOf(opts.topicOpt) val configs = parseTopicConfigsToBeAdded(opts) ...
首先我们找到源码入口处, 查看一下 kafka-topic.sh脚本的内容 exec(dirname0)/kafka-run-class.sh kafka.admin.TopicCommand " 1. 源码入口 上面的源码主要作用是 根据是否有传入参数--zookeeper来判断创建哪一种 对象topicService如果传入了--zookeeper则创建 类ZookeeperTopicService的对象 否则创建类AdminClientTopic...
TopicCommand发送topic删除命令,在zk的/admin/delete_topics目录下创建topic节点 controller会监听该zk目录下任何节点的变更并为对应的topic开启删除操作 controller开启一个后台线程处理topic的删除。使用该线程主要为了以后能够增加TTL(time to live)的特性。无论何时开启或重启topic删除操作时都会通知该线程。当前,topic删除...
3.1 Topic 创建入口 首先我们找到 kafka-topics.sh 这个脚本,看下里面的内容: exec$(dirname$0)/kafka-run-class.sh kafka.admin.TopicCommand"$@" 最终执行的是 kafka.admin.TopicCommand 该类,源码中找到该类,用 IDEA 进行断点调试源码。 程序参数: ...