使用 spark structured streaming 从许多不同的 kafka 经纪人那里消费相同主题的最佳方式是什么?

What is the best way to consume the same topic from many different kafka brokers with spark structured streaming?

我遇到的情况是我的负载分布在几个数据中心 (dc) 之间,每个数据中心都有自己的 Kafka Broker 和数据处理器,它们只为自己的数据中心处理数据。 所以,我会有经纪人 broker1-dc1, broker1-dc2,..,broker1-dcn,所有经纪人都会有相同的主题,例如DATA_TOPIC.

我想要使用来自我所有不同代理的主题 DATA_TOPIC 并将这些数据保存在单个数据湖中 table,我正在使用结构化流来实现,但事实并非如此一个要求。

我对 spark 没有太多经验,我想知道的是我能做到这一点的最佳方式,我正在考虑两种选择:

  1. 具有不同的 spark 作业,其中每个作业都使用来自不同数据中心的数据并具有唯一的检查点位置;
  2. 有一个独特的工作,每个数据中心都有一个消费者(Kafka readStream),并在所有消费者之间进行联合

这些选项中哪个更好,或者有更好的选项吗?

我不知道这是否有帮助,但我计划将 AWS 架构与 EMR、S3、Glue 和 delta lake 或 iceberg 一起用作 table 格式。

谢谢

Kafka 客户端一次只能使用一个 bootstrap.servers,因此如果计划定义 N 个流数据帧,这似乎是一个糟糕的设计选择,因为理想情况下,一个失败的流不应停止您的应用程序。

相反,我建议考虑使用 MirrorMaker2 将主题整合到一个 Kafka 集群中,您将 运行 对其进行处理,这应该会产生与合并相同的效果。

您的第一个选项有点相似,但如果您想管理 N 个 Spark 应用程序及其检查点,或者管理 N 个服务于单一目的且可以 运行 的 Kafka Connect 进程,则需要权衡连接集群