java kafkastream_java – 合并多个相同的Kafka Streams主题

我有2个Kafka主题从不同来源流式传输完全相同的内容,因此我可以在其中一个源失败的情况下获得高可用性.

我正在尝试使用Kafka Streams 0.10.1.0将2个主题合并为1个输出主题,这样我就不会错过任何有关失败的消息,并且当所有源都启动时没有重复.

当使用KStream的leftJoin方法时,其中一个主题可以没有问题(次要主题),但是当主要主题发生故障时,不会向输出主题发送任何内容.这似乎是因为,根据Kafka Streams developer guide,

KStream-KStream leftJoin is always driven by records arriving from the primary stream

因此,如果没有来自主流的记录,它将不会使用辅助流中的记录,即使它们存在.主流重新联机后,输出将恢复正常.

我也尝试使用outerJoin(添加重复记录),然后转换为KTable和groupByKey以消除重复,

KStream mergedStream = stream1.outerJoin(stream2,(streamVal1,streamVal2) -> (streamVal1 == null) ? streamVal2 : streamVal1,JoinWindows.of(2000L))

mergedStream.groupByKey()

.reduce((value1,value2) -> value1,TimeWindows.of(2000L),stateStore))

.toStream((key,value) -> value)

.to(outputStream)

但我偶尔也会重复一遍.我也使用commit.interval.ms = 200来让KTable经常发送到输出流.

处理此合并以获得多个相同输入主题的一次输出的最佳方法是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值