Apache flink:动态更改消费者主题

Apache flink: Dynamically change the consumer topic

我们正在构建一个将部署到 AWS Kinesis 数据分析 (KDA) 的 flink 应用程序。此应用程序将从 Kafka 消费并写入 S3。 我们的设置如下:

  1. 我们有一个包含多个主题的 Kafka bootstrap 服务器 (MSK)。
  2. 我们计划在 KDA 上部署多个 Flink 应用程序。所有这些应用程序都将属于同一个消费者组。

我们想做以下事情:

  1. 假设我们有 10 个 kafka 主题(topic 1topic 10)。
  2. 假设我们有 5 个 Flink 应用程序(app 1app 5)。
  3. 最初我们会将应用程序分配给主题(例如:app 1 将从 topic 12 消耗,app 2 将从 topic 34 等等)。
  4. 我们会将其存储在配置系统(比如 CRUD 应用程序)中,并且每个 Flink 应用程序在运行时都应该能够根据其名称查看它应该使用哪个主题。 (这部分我们可以做到)。
  5. 假设,通过 topic 4 的消息数量突然激增。我们将更新配置系统以指向 App 4,它从 topic 7topic 8 消耗,而不是从 topic 7topic 4.
  6. 消耗
  7. 我们希望 Flink 应用程序停止从旧主题消费并开始从新主题消费,而无需重新部署 Flink 应用程序。我们将有一个轮询器,它可以通知 Flink 应用程序它应该从不同的主题消费。问题是 Flink 应用程序停止从旧主题消费并开始从新主题消费而无需重新部署。

有什么办法吗?就我的研究而言,让 Flink 应用程序读取新主题的唯一方法是重新部署它。但是想看看是否有人想出了办法。

反之:如果我们让5个Flink应用都监听10个topic,会自动处理这种情况吗?我的意思是,如果其中一个话题突然激增,flink 应用程序是否会重新平衡自己以投入更多资源来阅读热门话题,因为它们都是同一消费者群体的一部分?

Flink 的 Kafka 消费者不支持从主题停止消费(无需重启),但它支持动态主题和分区发现。有关详细信息,请参阅 https://nightlies.apache.org/flink/flink-docs-stable/docs/connectors/datastream/kafka/#dynamic-partition-discovery