如何重置 kafka 以将其集成到 JUnit 测试过程中?
Posted
技术标签:
【中文标题】如何重置 kafka 以将其集成到 JUnit 测试过程中?【英文标题】:How to reset kafka to integrate it in a JUnit testing process? 【发布时间】:2016-07-04 06:42:39 【问题描述】:我正在测试和调试一个在 kafka 之上运行并使用 samza 的事件源(或有状态流处理)应用程序。我想删除 kafka 中的队列和主题,以便 samza 作业在启动时获得一个空的 kafka 安装。
我该怎么做?
编辑:
这个问题比我最初写的要复杂和具体。
正如大卫所说,从 kafka 0.8.2 开始,有一个清除主题的解决方案: Purge Kafka Queue
我感兴趣的是设置一个自动加载 zookeeper 和 kafka 的测试环境(它们作为二进制包捆绑在我的 git 存储库中)。
我正在使用 gradle 环境 + eclipse 和 JUnit。我从 Eclipse 运行集成测试(作为 JUnit 测试)。
如何自动加载?我应该创建一个特定的测试类来设置环境并启动 kafka 和 zookeeper 吗?有没有参考示例/代码?这个想法是加载环境,运行一些测试,然后停止。如果这个过程能在几秒钟内完成,那就更好了。
【问题讨论】:
这是一个重复的问题,之前被问过并回答过。见这里:***.com/questions/16284399/purge-kafka-queue 在我看来,这可能是一个稍微大一点的问题。我将回答更大的问题并参考具体方法。 【参考方案1】:有different approaches 可以清除个别主题。所有这些都可以扩展到清除您的所有主题。但是,我认为您在问一个与为 Kafka 创建基线环境相关的更大问题——也许您需要进行测试。或者,也许您有一个每次都从头开始的生产过程。这些实际上是不同的场景。
用于测试
如果你说的是测试,那么我会故意做一些蛮力的事情。首先,我将 Kafka 配置为我希望它在启动时的样子。然后我会关闭它并备份它——或者使用tar
,或者甚至可能制作磁盘映像,如果我使用的是虚拟机。
我会在测试期间使用它并滥用它,然后在完成后将其全部丢弃。 “重置 kafka”只是意味着通过untar
或从磁盘映像或其他任何东西(甚至是rsync
,或者只是从另一个目录中的cp
)进行恢复。
对于测试,我确实想要一个干净的开始,所以我更喜欢蛮力。
制作期间
如果这是您的生产流程的一部分——我从表面上质疑这是否明智——那么我会尽量不要先丢失数据。在您的流程中包含备份,或者实际上不重置主题。
Topic rename 尚不存在——但您可以使用将要使用的相同方法。不要直接处理主题名称——使用字典将虚拟主题名称映射到实际主题名称。
然后,不是每次都“重置”Kafka,而是创建所有主题的新版本,并更新字典以将虚拟主题名称映射到新创建的主题版本。
【讨论】:
用于测试。在这个相关问题中已经有:***.com/a/30833940/2108278 是的,我在回答中提到了这一点——但这是更高级别的。那篇文章处理了单个主题的清除,我在更高的层次上提出了这个问题——如何重置所有 Kafka 进行测试,而不仅仅是单个主题。以上是关于如何重置 kafka 以将其集成到 JUnit 测试过程中?的主要内容,如果未能解决你的问题,请参考以下文章