Kafka客户端在Spark结构化流中消耗的重复消息:

时间:2020-02-28 12:52:58

标签: duplicates kafka-consumer-api spark-structured-streaming spark-streaming-kafka kafka-partition

问题是,一段时间后,突然从Kafka群集(5节点)Broker中消耗了重复消息。我们的应用程序不应处理重复的消息。 Kafka使用者通过Spark结构化流实现。

此时所有重复的消息都来自单个分区。我发现在某个时间点,特定分区的偏移量被重置为最早的(稳定偏移量),并且消息再次从重置偏移量被消耗。

以下是DEBUG模式下使用者的日志。从分区20开始有重复记录,此时,以下两行与普通日志有些不同。在运行了四个小时之后,遇到了重复的情况,此时客户端突然发送带有partitionTimestamps -2的ListOffsetRequest。我已经检查了完整的日志,只有在这一点上,此特定分区的值才发送-2(最早)而不是-1(最新)。这看起来很奇怪,并且无法找到此行为的根本原因。

<!-- language: lang-none -->
20/02/20 18:27:53 DEBUG internals.Fetcher: [Consumer clientId=consumer-1, groupId=spark-kafka-source-bca38026-e65e-4e24-8d86-aaa-driver-0]
 Sending ListOffsetRequest (type=ListOffsetRequest, replicaId=-1, partitionTimestamps={Hid1328.gngp-raw-20=-2}, isolationLevel=READ_UNCOMMITTED) to broker famescpolyfi5.teliacompany.net:9095 (id: 5 rack: null)

20/02/20 18:27:53 DEBUG internals.Fetcher: [Consumer clientId=consumer-1, groupId=spark-kafka-source-bca38026-e65e-4e24-8d86-9daf0d34b406--1757490130-driver-0] Sending ListOffsetRequest (type=ListOffsetRequest, replicaId=-1, partitionTimestamps={Hid1328.gngp-raw-5=-1, Hid1328.gngp-raw-20=-1, Hid1328.gngp-raw-25=-1, Hid1328.gngp-raw-10=-1, Hid1328.gngp-raw-15=-1, Hid1328.gngp-raw-0=-1}, isolationLevel=READ_UNCOMMITTED) to broker famescpolyfi5.teliacompany.net:9095 (id: 5 rack: null) 

我试图从不同的角度寻找问题

  1. Broker上的主题配置(分区数和保留时间)。

  2. 检查点正在HDFS中捕获。

  3. Kafka客户端配置

由于应用程序处于结构化流传输中,因此无法将auto.offset.reset配置最早设置为

由于该问题,完整的解决方案受到了损害。如果有人遇到此问题,请分享如何避免该问题的根源。

0 个答案:

没有答案