我可以测试卡夫卡流抑制逻辑吗?

时间:2019-08-28 06:55:12

标签: apache-kafka apache-kafka-streams

我的应用程序使用kafka流suppress逻辑。

我想使用抑制来测试kafka流拓扑。

运行uinit测试,我的拓扑未发出结果。

Kafka流逻辑

...
.suppress(Suppressed.untilTimeLimit(Duration.ofSeconds(5), Suppressed.BufferConfig.maxBytes(1_000_000_000L).emitEarlyWhenFull()))
...

我的测试用例代码。 创建输入数据后,正在运行的测试用例无法读取抑制逻辑输出记录。 只需返回null

testDriver.pipeInput(recordFactory.create("input", key, dummy, 0L));

System.out.println(testDriver.readOutput("streams-result", Serdes.String().deserializer(), serde.deserializer()));

我可以测试抑制逻辑吗?

1 个答案:

答案 0 :(得分:1)

简单的回答是。

此示例Confluent Example Tests特别有用,它特别测试了抑制功能。许多其他示例始终是首先检查的好地方。这是用Kotlin编写的另一个示例。

有关此功能及其测试的说明,可以在此blog post

的第3页中找到

一些关键点:

  • 该窗口将仅发出文档预期的最终结果。
  • 要刷新最终结果,您将需要发送一个额外的虚拟事件,如示例中所示,例如汇合here
  • 您需要操纵事件时间以对其进行测试,因为抑制可以抵消事件时间,可以通过测试输入主题API或使用自定义的 TimestampExtractor 来提供。
  • li>
  • 对于测试,我建议设置以下内容以删除缓存并缩短提交间隔。

    props [StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG] = 0 props [StreamsConfig.COMMIT_INTERVAL_MS_CONFIG] = 5

希望这会有所帮助。