kafka实战 - 删除topic

本文详细介绍了在Kafka中删除Topic的操作,包括自动和手动删除方法,以及相关注意事项。在自动删除时,需要设置`delete.topic.enable`为true,并确保producer和consumer已停止。手动删除则涉及停止Kafka、清理Zookeeper和log.dirs下的相关数据。同时讨论了auto.create.topics.enable参数的影响,以及在不恰当操作下可能导致的数据丢失和消费者错误。
摘要由CSDN通过智能技术生成

概述

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

  我测试环境使用的kafka版本是0.10.2.0,不同版本的kafka默认配置和bin目录下脚本使用的方式略有不同,以下讨论仅在0.10.2.0版本的kafka中实测过。使用的producer和consumer均为php客户端。

 

推荐的自动化的删除方法

  在kafka0.8.2.x之后的kafka都支持自动化删除topic,并且官方提供了把这个功能做到了bin/kafka-topics.sh中。只需要下面简单的一步,和这个topic相关的数据就会被删除:

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

  如果使用这种删除方法,需要注意以下几个问题:

    1. config文件中的delete.topic.enable需要设置为true

      在0.10.2.0版本中,这个参数默认是为false的。经过实测,如果这个参数不显式地指定为true,上面的命令和没执行一样,producer该生产生产,consumer该消费消费,consumer_group的logsize也正常显式。broker的删除原理就是用户在zookeeper/admin/delete_topics中创建一个节点(以topic命名),controller(其实就是某个选举出来的broker),监听zookeeper的/admin/delete_topics目录,如果发现有新的节点创建,则会启动删除topic的逻辑(可以参考这篇博文:https://www.cnblogs.com/huxi2b/p/4842695.html)。如果你ls一下这个目录,发现如果delete.topic.enable为false,这个临时节点也是不会创建的,也就是说,删除topic的逻辑压根不会启动。

    2. 停止producer和consumer

      不停producer和consumer不一定会发生问题,但是停掉了一定不会发生问题。要是不是什么实时的业务,还是停掉比较好一些。在接下来的讨论里面,你就会发现,在删除topic的同时,不停止producer和consumer会产生多么复杂的情况,而且搞不好还会漏消费数据,造成数据丢失的情况。
      在开始讨论之前,不得不提到一个config文件中的参数,auto.create.topics.enable。该参数在官方文档中的描述是这样的:Enable auto creation of topic on the server。在实践中的效果是这样的:如果你给一个不存在的topic中produce数据,或者你给一个不存
在 的topic发起consume请求,那么这个topic就会自动被创建。与这个配置相关的配置还有2个,num.partitions和default.replication.factor,分别控制自动创建的topic的partition数和副本数。在0.10.2.0版本kafka中,默认值是auto.create.topics.enable=true, num.partitions=1, default.r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值