在探索如何对Kafka Stream进行单元测试时遇到ProcessorTopologyTestDriver
,遗憾的是这个类似乎已经被版本0.10.1.0
(KAFKA-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
答案 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