【问题标题】:Kafka Streams: How to avoid forwarding downstream twice when repartitioningKafka Streams:重新分区时如何避免向下游转发两次
【发布时间】:2018-01-13 20:43:20
【问题描述】:

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

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

提前谢谢你

【问题讨论】:

    标签: apache-kafka-streams


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2018-01-05
      • 2018-04-28
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多