如何对Kafka Streams进行单元测试

时间:2017-04-05 00:59:20

标签: apache-kafka apache-kafka-streams

在探索如何对Kafka Stream进行单元测试时遇到ProcessorTopologyTestDriver,遗憾的是这个类似乎已经被版本0.10.1.0KAFKA-4408

打破了

是否可以解决KTable问题?

我看到了" Mocked Streams"项目,但首先它使用版本0.10.2.0,而我在0.10.1.1,第二个是Scala,而我的测试是Java / Groovy。

这里有关如何在没有bootstrap zookeeper / kafka的情况下对流进行单元测试的任何帮助都会很棒。

注意:我确实有使用嵌入式服务器的集成测试,这是用于单元测试,也就是快速,简单的测试。

修改

感谢Ramon Garcia

  

对于到访Google搜索的人来说,请注意测试驱动程序类现在是org.apache.kafka.streams.TopologyTestDriver

     

此类位于maven包groupId org.apache.kafka,artifactId kafka-streams-test-utils

2 个答案:

答案 0 :(得分:2)

我找到了解决这个问题的方法,我不确定这是答案,特别是在https://stackoverflow.com/users/4953079/matthias-j-sax评论之后。无论如何,分享到目前为止我所拥有的......

我完全复制了ProcessorTopologyTestDriver from the 0.10.1 branch(这是我正在使用的版本)。

要解决KAFKA-4408我可以访问private final MockConsumer<byte[], byte[]> restoreStateConsumer并将块task = new StreamTask(...移动到单独的方法,例如bootstrap

在测试的设置阶段,我执行以下操作

driver = new ProcessorTopologyTestDriver(config, builder)
ArrayList partitionInfos = new ArrayList();
partitionInfos.add(new PartitionInfo('my_ktable', 1, (Node) null, (Node[]) null, (Node[]) null));
driver.restoreStateConsumer.updatePartitions('my_ktable', partitionInfos);
driver.restoreStateConsumer.updateEndOffsets(Collections.singletonMap(new TopicPartition('my_ktable', 1), Long.valueOf(0L)));
driver.bootstrap()

就是这样......

<强>加成

我也遇到了KAFKA-4461,幸运的是,因为我复制了整个课程,所以我能够通过微调来“挑选”accepted fix

一如既往的反馈意见。虽然显然不是官方测试类,但这个驱动程序被证明非常有用!

答案 1 :(得分:1)

对于到访Google搜索的人来说,请注意测试驱动程序类现在是org.apache.kafka.streams.TopologyTestDriver

此类位于maven包groupId org.apache.kafka,artifactId kafka-streams-test-utils