Kafka0.8.2删除topic逻辑(转)

原文链接:Kafka0.8.2.1删除topic逻辑

前提条件: 在启动broker时候开启删除topic的开关,即在server.properties中添加:  delete.topic.enable=true

命令: bin/kafka-topics.sh --zookeeper zk_host:port/chroot --delete --topic my_topic_name           注:chroot如果没有设置就空过去

这条命令其实就是在zookeeper(假设你的chroot就是/)的/admin/delete_topics下创建一个临时节点,名字就是topic名称,比如如果执行命令:

bin/kafka-topics.sh --zookeeper zk_host:port/chroot --delete --topic test-topic

那么,命令返回后,zookeeper的/admin/delete_topics目录下会新创建一个临时节点test-topic

这条命令返回打印在控制台上的消息也说明了这点:

Topic test-topic is marked for deletion.

Note: This will have no impact if delete.topic.enable is not set to true.

这就是说,这条命令其实并不执行删除动作,仅仅是在zookeeper上标记该topic要被删除而已,同时也提醒用户一定要提前打开delete.topic.enable开关(在server.properties中添加),否则删除动作是不会执行的。如果之前运行时没有设置,那么设置后需要重新运行,然后才能删除。

那么,我们通过命令标记了test-topic要被删除之后Kafka是怎么执行删除操作的呢? 总的流程如下图所示:

1. Kafka controller在启动的时候会注册对于Zookeeper节点/admin/delete_topics的子节点变更监听器——上面的分析已经告诉 我们,delete命令实际上就是要在该节点下创建一个临时节点,名字是待删除topic名,标记该topic是待删除的

2. Kafka controller在启动时创建一个单独的线程,执行topic删除的操作 (由DeleteTopicsThread类实现)

3. 线程启动时查看是否有需要进行删除的topic——假设我们是在controller启动之后执行的topic删除命令,那么该线程刚启动的时候待删除的topic集合应该就是空的

4. 一旦发现待删除topic集合是空,topic删除线程会被挂起

5. 这时,我们执行delete操作,删除topic: test-topic,delete命令在/admin/delete_topics下创建子节点test-topic

6. 监听器捕获到该变更,立刻触发删除逻辑

6.1 查询test-topic是否存在,不存在的话直接删除/admin/delete_topics/test-topic节点——随便删除一个不存在的 topic,删除命令也只是创建/admin/delete_topics/[topicName]的节点,它不负责做存在性校验

6.2 查询一下test-topic是不是当前正在执行Preferred副本选举或分区重分配,如果是的话,肯定是不适合进行删除掉的。Controller 本地会缓存当前无法进行删除的topic集合,待分区重分配完成或preferred副本选举后单独处理该集合中的topic

6.3 如何两者都不是的话说明现在可以进行删除操作,那么就恢复挂起的删除线程执行删除操作

删除线程执行删除操作的真正逻辑是:

1. 它首先会给当前所有broker发送更新元数据信息的请求,告诉这些broker说这个topic要删除了,你们可以把它的信息从缓存中删掉了

2. 开始删除这个topic的所有分区

2.1 给所有broker发请求,告诉它们这些分区要被删除。broker收到后就不再接受任何在这些分区上的客户端请求了

2.2 把每个分区下的所有副本都置于OfflineReplica状态,这样ISR就不断缩小,当leader副本最后也被置于OfflineReplica状态时leader信息将被更新为-1

2.3 将所有副本置于ReplicaDeletionStarted状态

2.4 副本状态机捕获状态变更,然后发起StopReplicaRequest给broker,broker接到请求后停止所有fetcher线程、移除缓存,然后删除底层log文件

2.5 关闭所有空闲的Fetcher线程

3. 删除zookeeper下/brokers/topics/test-topic节点

4. 删除zookeeper下/config/topics/test-topic节点

5. 删除zookeeper下/admin/delete_topics/test-topic节点

6. 更新各种缓存,把test-topic相关信息移除出去

时间: 2024-10-12 09:29:02

Kafka0.8.2删除topic逻辑(转)的相关文章

kafka实战 - 删除topic

概述 在平时对kafka的运维工作中,我们经常会由于某些原因去删除一个topic,比如这个topic是测试用的,生产环境中需要删除.或者我想扩容topic的同时,这个topic中的数据我不想要了,这时候删除topic,增加broker,再重新创建topic就会是比较简单的方法.但是kafka删除topic时,有很多关键的点必须清楚,否则在删除topic的时候就会出现各种各样的问题. 我测试环境使用的kafka版本是0.10.2.0,不同版本的kafka默认配置和bin目录下脚本使用的方式略有不同

Kafka如何删除topic?

Kafka如何删除topic? 今天为大家带来"Kafka删除topic原理解析",希望可以帮到那些苦于无法删除topic的朋友们. 前提条件: 在启动broker时候开启删除topic的开关,即在server.properties中添加:  delete.topic.enable=true 命令: bin/kafka-topics.sh --zookeeper zk_host:port/chroot --delete --topic my_topic_name 这条命令其实就是在zo

kafka彻底删除topic

如果只是用kafka-topics.sh的delete命令删除topic,会有两种情况: 如果当前topic没有使用过即没有传输过信息:可以彻底删除 如果当前topic有使用过即有过传输过信息:并没有真正删除topic只是把这个topic标记为删除(marked for deletion). 要彻底把情况2中的topic删除必须把kafka中与当前topic相关的数据目录和zookeeper与当前topic相关的路径一并删除. 相关组件的版本 zookeeper: 3.4.6 kafka: 0.

kafka删除topic的方法

0.8的官方文档提供了一个删除topic的命令: kafka-topics.sh --delete 但是在运行时会报错找不到这个方法. kafka-topics.sh最终是运行了kafka.admin.TopicCommand这个类,在0.8的源码中这个类中没有找到有delete topic相关的代码. 在kafka的admin包下,提供了一个DeleteTopicCommand的类,可以实现删除topic的功能. kafka.admin.DeleteTopicCommand 其中删除topic

kafka删除topic

手动: 删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录 删除zookeeper "/brokers/topics/"目录下相关topic节点 命令+手动: bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic mrtopic --zookeeper cmcc1:2181,cmcc2:2181,cmcc

Kafka管理与监控——彻底删除topic

一.配置 server.properties 设置 delete.topic.enable=true 如果没有设置 delete.topic.enable=true,则调用kafka 的delete命令无法真正将topic删除,而是显示(marked for deletion) 二.停止消费 如果需要被删除topic 此时正在被程序 produce和consume,则这些生产和消费程序需要停止. 因为如果有程序正在生产或者消费该topic,则该topic的offset信息一致会在broker更新

10 删除topic中的数据

1 打开    server.properties2  添加一条:  delete.topic.enable=true 3  执行命令:   bin/kafka-topics.sh --delete --zookeeper 9.37.138.215:2181, 9.42.18.65:2181, 9.37.201.53:2181 --topic kfk 执行完后,topic中现有的数据就没有了(其实没有真正删除), offset从0开始,此时consumer 的 subscribe可以接收到数据.

物理删除和逻辑删除的区别

1.“物理删除”是计算机处理数据时的一个概念.与物理删除相对应的是逻辑删除. 2.逻辑删除就是对要要删除的数据打上一个删除标记,在逻辑上是数据是被删除的,但数据本身依然存在!而物理删除则是把数据从介质上彻底删除掉. 原文地址:https://www.cnblogs.com/wz123/p/10450129.html

Kafka删除topic操作步骤

1.如果配置了delete.topic.enable=true 适合以下操作 通过命令删除:./kafka-topics.sh --zookeeper 127.0.0.1:2181 --delete --topic apply_test 通过zookeeper-client 删除掉broker下的topic, rmr /brokers/topics/apply_test 删除kafka节点的 kafka/logs/apply_test-0, 然后重启kafka集群 重新创建即可: /data1/