Kafka Streams:重新分区时如何避免两次下游转发

时间:2018-01-13 20:43:20

标签: apache-kafka-streams

在我的应用程序中,我有一个非常简单的KafkaStreams实例:有一个处理器,带有键值存储,每个传入的消息都被写入存储,然后向下游转发到接收器。

我想增加源主题的分区数,然后重新处理数据,这样每个商店只包含与其分区相关的密钥。 (我知道这是使用应用程序重置工具完成的)。但是,在重新处理数据时,我不想向下游转发任何内容;我只想转发新数据。 (否则,结果主题的使用者将再次处理旧值)。我的问题:是否有一种简单的方法可以实现这一目标?任何可以帮助我分辨再处理数据和新数据的内置机制可能吗?

提前谢谢

1 个答案:

答案 0 :(得分:0)

没有内置机制。但是,您可能只需在重新处理数据时删除写入结果主题的接收器操作 - 重新处理完成后,停止应用程序,再次添加接收器并重新启动。不确定这是否适合你。

另一种可能的解决方案可能是,使用transform()工具基于偏移量的过滤器。对于每个输入主题分区,您将获得第一个新消息的偏移量(这是您在编写Transformer之前需要手动执行的操作)。您使用此信息,将过滤器实现为自定义Transformer:对于每个输入记录,您检查记录的分区和偏移量并将其删除,如果记录的偏移量小于此第一个新消息的偏移量分区。