0

我正在测试和调试一个在 kafka 之上运行并使用 samza 的事件源(或有状态的流处理)应用程序。我想删除 kafka 中的队列和主题,以便 samza 作业在启动时获得一个空的 kafka 安装。

我该怎么做??


编辑:

这个问题比我最初写的要复杂和具体。

正如大卫所说,有一个清除主题的解决方案,从 kafka 0.8.2 开始: Purge Kafka Queue

我感兴趣的是设置一个自动加载 zookeeper 和 kafka 的测试环境(它们作为二进制包捆绑在我的 git 存储库中)。

我正在使用 gradle 环境 + eclipse 和 JUnit。我从 Eclipse 运行集成测试(作为 JUnit 测试)。

加载如何实现自动化?我应该创建一个特定的测试类来设置环境并启动 kafka 和 zookeeper 吗?有没有参考示例/代码?这个想法是加载环境,运行一些测试,然后停止。如果这个过程可以在几秒钟内完成,那就更好了。

4

1 回答 1

1

清除单个主题有不同的方法。所有这些都可以扩展到清除您的所有主题。但是,我认为您提出了一个与为 Kafka 创建基线环境相关的更大问题——也许您需要进行测试。或者,也许您有一个每次都从头开始的生产过程。这些实际上是不同的场景。

用于检测

如果您在谈论测试,那么我会故意做一些蛮力的事情。首先,我会将 Kafka 配置为我希望它在启动时的样子。然后我会关闭它并备份它——tar如果我使用的是 VM,则使用甚至可能制作磁盘映像。

我会在测试期间使用它并滥用它,然后在完成后将其全部丢弃。“重置kafka”只是意味着通过untar或从磁盘映像或其他任何东西(rsync甚至或仅从cp另一个目录)进行恢复。

对于测试,我真的想要一个干净的开始,所以我更喜欢蛮力。

生产期间

如果这是您的生产过程的一部分——我质疑这是否明智——那么我会尽量不要先丢失数据。在您的流程中包含备份,或者实际上不重置主题。

主题重命名尚不存在——但您可以使用将要使用的相同方法。不要直接处理主题名称——使用字典将虚拟主题名称映射到实际主题名称。

然后,不是每次都“重置”Kafka,而是创建所有主题的新版本,并更新字典以将虚拟主题名称映射到新创建的主题版本。

于 2016-03-17T20:07:53.733 回答