Python如何删除Kafka主题

时间:2015-09-21 19:55:19

标签: python python-2.7 apache-kafka kafka-python

我是kafka的新手。我们正在尝试将数据从csv文件导入Kafka。我们需要每天导入,同时前一天的数据被删除。 如何在python中删除Kafka主题下的所有消息?或者如何在python中删除Kafka主题? 或者我看到有人建议等待数据过期,如果可能的话,如何设置数据到期时间? 任何建议将不胜感激!

由于

2 个答案:

答案 0 :(得分:2)

您无法删除Kafka主题中的邮件。你可以:

  • 设置log.retention.*属性,这基本上是消息的到期时间。您可以选择基于时间的过期(例如,保留6小时或更新的消息)或基于空间的过期(例如,保留最多1 GB的消息)。请参阅Broker config并搜索保留。您可以为不同的主题设置不同的值。
  • 删除整个主题。这有点棘手,我不推荐这种方式。
  • 每天创建一个新主题。像 my-topic-2015-09-21 这样的东西。

但我认为你根本不需要删除主题中的消息。因为您的Kafka消费者会跟踪已处理的消息。因此,当您阅读所有今天的消息时,Kafka消费者会保存这些信息,您明天就会阅读新消息。

另一种可能的解决方案可能是Log compaction。但它更复杂,可能不是你需要的。基本上,您可以为Kafka主题中的每条消息设置密钥。如果您使用相同的密钥发送两个不同的消息,Kafka将仅保留主题中的最新消息,它将删除具有相同密钥的所有旧消息。您可以将其视为一种"键值存储"。具有相同密钥的每条消息只更新特定密钥下的值。但是,嘿,你真的不需要这个,它只是FYI :-)。

答案 1 :(得分:0)

最简单的方法是简单地删除主题。我在Python自动化测试套件中使用它,我想验证通过Kafka发送的一组特定测试消息,并且不希望看到先前测试运行的结果

def delete_kafka_topic(topic_name):
    call(["/usr/bin/kafka-topics", "--zookeeper", "zookeeper-1:2181", "--delete", "--topic", topic_name])
相关问题