获取重试退避错误并且在马拉松中不重新启动kafka-streams

时间:2018-09-01 12:43:39

标签: apache-kafka apache-kafka-streams

我们的kafka具有高可用性。我们运行多个kafka流,并在多个主题上引发工作。

但是,我们发现了一个发送记录的奇怪问题。我们收到的错误就是这样

  

任务[0_4]由于{},向主题TOPIC_NAME发送记录(键27314值example.jar.class时间戳1535741326818)时出错;此任务将不再发送记录,也不会记录任何偏移。   您可以增加生产者参数retriesretry.backoff.ms以避免此错误。   org.apache.kafka.streams.errors.StreamsException:任务[0_4]由于在1条记录中已过期,因此前一个记录(键27314值example.jar.class@6f7cb16c时间戳1535741326818)捕获到错误,因此异常终止发送。 )对于TOPIC_NAME-4:自创建批处理以来,已经过去了42708毫秒   您可以增加生产者参数retriesretry.backoff.ms来避免此错误。

我们还尝试将延迟时间保持为0,以使其在收到后立即处理。但没有运气。

我们的配置如下

retries: 3
retry-backoff-ms: 20000
replication-factor: 1
reconnect-backoff-ms: 60000
max-poll-records: 1000
session-timeout-ms: 300000

此外,我们还进行了马拉松比赛来管理kafka流,但它不会将其检测为故障并且不会自动重启。

因此,我想适当地运行kafka流,或针对此类错误(最后一个选择)自动重启马拉松。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我在群集中有5个代理,在主题的32个分区中具有2的复制因子。

我忘记了kafka流会创建内部主题。默认情况下,它们的复制因子为1。原因是,当我们尝试杀死一个代理时,内部主题不再可用,因为它没有副本。因此,请尝试将内部主题的复制因子设置为与源主题相同。希望对您有所帮助。

答案 1 :(得分:0)

如果Kafka Stream中发生错误,则仅内部StreamThread死亡,但在“主”线程中没有引发异常。我猜,这就是为什么未检测到错误的原因。建议在KafkaStreams客户端上注册未捕获的异常句柄,以获取有关线程快死的通知并做出相应的反应。

关于错误本身。这可能是一个已知问题(有关详细信息,请比较KIP-91)。您可以尝试增加参数request.timeout.ms作为解决方法。