我们的kafka具有高可用性。我们运行多个kafka流,并在多个主题上引发工作。
但是,我们发现了一个发送记录的奇怪问题。我们收到的错误就是这样
任务[0_4]由于{},向主题TOPIC_NAME发送记录(键27314值example.jar.class时间戳1535741326818)时出错;此任务将不再发送记录,也不会记录任何偏移。 您可以增加生产者参数
retries
和retry.backoff.ms
以避免此错误。 org.apache.kafka.streams.errors.StreamsException:任务[0_4]由于在1条记录中已过期,因此前一个记录(键27314值example.jar.class@6f7cb16c时间戳1535741326818)捕获到错误,因此异常终止发送。 )对于TOPIC_NAME-4:自创建批处理以来,已经过去了42708毫秒 您可以增加生产者参数retries
和retry.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流,或针对此类错误(最后一个选择)自动重启马拉松。
答案 0 :(得分:1)
我遇到了同样的问题。我在群集中有5个代理,在主题的32个分区中具有2的复制因子。
我忘记了kafka流会创建内部主题。默认情况下,它们的复制因子为1。原因是,当我们尝试杀死一个代理时,内部主题不再可用,因为它没有副本。因此,请尝试将内部主题的复制因子设置为与源主题相同。希望对您有所帮助。
答案 1 :(得分:0)
如果Kafka Stream中发生错误,则仅内部StreamThread
死亡,但在“主”线程中没有引发异常。我猜,这就是为什么未检测到错误的原因。建议在KafkaStreams
客户端上注册未捕获的异常句柄,以获取有关线程快死的通知并做出相应的反应。
关于错误本身。这可能是一个已知问题(有关详细信息,请比较KIP-91)。您可以尝试增加参数request.timeout.ms
作为解决方法。