通过使用两个不同的 spark 结构化流读取同一主题来调试 Kafka 管道
Debug Kafka pipeline by reading same topic with two different spark structured streams
我有一个 Kafka 主题,它是我生产中的流数据。我想将相同的数据流用于我的调试目的,而不影响现有管道的偏移量。
我记得在早期版本中为此目的创建了不同的消费者组,但我正在使用 Spark 结构化流从 kafka 读取数据,它不鼓励在从 Kafka 读取数据时使用 groupID。
每个 Spark Structured 流都会创建一个唯一的 ConsumerGroup,如您在 code:
中所见
// Each running query should use its own group id. Otherwise, the query may be only assigned
// partial data since Kafka will assign partitions to multiple consumers having the same group
// id. Hence, we should generate a unique id for each query.
val uniqueGroupId = s"spark-kafka-source-${UUID.randomUUID}-${metadataPath.hashCode}"
由于 Spark 在其自己的检查点文件中管理偏移量并且从不将任何偏移量提交回 Kafka,因此您的两个结构化流作业不会在偏移量方面相互干扰。两者将 运行 完全相互独立,您无事可做。为每个流式传输作业设置单独的检查点目录可能会有所帮助。
我已经从 Kafka 主题 here.
中使用 spark structured streaming job reading 给出了关于偏移量管理的更详细的答案
我有一个 Kafka 主题,它是我生产中的流数据。我想将相同的数据流用于我的调试目的,而不影响现有管道的偏移量。
我记得在早期版本中为此目的创建了不同的消费者组,但我正在使用 Spark 结构化流从 kafka 读取数据,它不鼓励在从 Kafka 读取数据时使用 groupID。
每个 Spark Structured 流都会创建一个唯一的 ConsumerGroup,如您在 code:
中所见// Each running query should use its own group id. Otherwise, the query may be only assigned
// partial data since Kafka will assign partitions to multiple consumers having the same group
// id. Hence, we should generate a unique id for each query.
val uniqueGroupId = s"spark-kafka-source-${UUID.randomUUID}-${metadataPath.hashCode}"
由于 Spark 在其自己的检查点文件中管理偏移量并且从不将任何偏移量提交回 Kafka,因此您的两个结构化流作业不会在偏移量方面相互干扰。两者将 运行 完全相互独立,您无事可做。为每个流式传输作业设置单独的检查点目录可能会有所帮助。
我已经从 Kafka 主题 here.
中使用 spark structured streaming job reading 给出了关于偏移量管理的更详细的答案