如何重置 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 测试过程中?的主要内容,如果未能解决你的问题,请参考以下文章

学习使用哪个 Kafka API 以将传统集成系统转换为 Apache Kafka

Junit:拆分集成测试和单元测试

如何将一个事件拆分为多个事件以将它们发送到多路复用扇出流

如何构建 pipeline_kafka 扩展

SpringBoot 集成JUnit

如何查找选择了哪个 ListView 项以将其添加到 ArrayList