繁体   English   中英

Kafka 流应用程序重置 globalTable 和输入主题

[英]Kafka streams application reset globalTable and input topics

我正在构建一个 kafka-streams 应用程序,目的是在业务逻辑失败的情况下进行水平扩展和数据重新处理。

该应用程序使用来自具有相同分区数并与KStream::merge连接的两个主题的数据。 还有第三个主题提供所有应用程序实例必须使用的数据,这造成了我面临的困难。

到目前为止,我尝试使用globalTable来提供来自全局主题的数据,但是当我重置应用程序以使用历史数据时,我不确定它的行为。

据我了解,在应用程序重置后,所有merged的输入主题都以处理器接收时间戳增加的数据的方式使用。 我担心的是,当我通过 GlobalTable 使用数据并通过GlobalTable将其提供给处理器StateStore ,此功能不适用。 似乎当我重新处理数据时,从 StateStore 提供的StateStore只是最新使用的 state,并且与时间戳的输入数据无关。

我的问题是:

  1. 如何向所有应用程序实例提供“全局”输入主题,以便每个应用程序实例都拥有所有数据?
  2. GlobalTable state 商店在应用程序重置后表现如何? state 主题是否与其他输入主题同步使用?

不确定“全局”输入主题是什么意思。 但是,如果多个应用程序要使用相同的数据进行数据转换/丰富,那么最好的选择是设置与订阅同一主题的应用程序一样多的消费者组。 通过这种方式,同一组数据将在具有相同应用程序的多个消费者实例的不同消费者组之间进行广播。

另外,应用程序重置是指KAFKA通过CLI提供的ART(应用程序重置工具)吗?

如果是这样,根据我的理解,单独对 GlobalTable 没有特定要求,但 ART 作为一个实体在 Stream 处理器上工作。

使用应用程序重置工具时,Kafka state 存储会发生什么情况?

https://docs.confluent.io/4.0.0/streams/developer-guide/app-reset-tool.html

ART 做什么?

输入主题:将偏移量重置为指定的 position(默认为主题的开头)。c

中间主题:跳到主题的末尾,即将所有分区的应用程序提交的消费者偏移量设置为每个分区的logSize(对于消费者组application.id)。

内部主题:删除内部主题(这会自动删除任何已提交的偏移量)。

ART 没有什么?

  • 重置应用程序的 output 主题。 如果下游应用程序使用任何 output(或中间)主题,则您有责任在重置上游应用程序时适当地调整这些下游应用程序。

  • 重置应用程序实例的本地环境。 您有责任在运行应用程序实例的任何机器上删除本地 state。

要完全重置应用程序,您必须在运行应用程序实例的任何机器上删除应用程序的本地 state 目录。 您必须在同一台机器上重新启动应用程序实例之前执行此操作。 您可以使用以下任一方法:

  • 应用程序代码中的 API 方法 KafkaStreams#cleanUp()。
  • 手动删除对应的本地 state 目录(默认位置:/tmp/kafka-streams/<application.id>)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM