由于卡夫卡制作人中的各种原因,我经常会遇到超时异常。我目前正在使用生产者配置的所有默认值。
我看到了以下超时异常:
org.apache.kafka.common.errors.TimeoutException:无法更新 60000 ms之后的元数据。
org.apache.kafka.common.errors.TimeoutException:过期1条记录 对于主题-1-0:自上次追加以来已过去30001 ms
我有以下问题:
这些超时异常的一般原因是什么?
处理超时异常的一般准则是什么?
超时异常是可重试的异常,重试它们是否安全?
我正在使用Kafka v2.1.0和Java 11。
谢谢。
答案 0 :(得分:2)
我建议在构建Producer配置时使用以下属性
kafka.acks = 1
kafka.retries = 3
timeout.ms = 200
retry.backoff.ms = 50
dataLogger.kafka.delivery.timeout.ms = 1200
{"data":[],"owner":"5eeaac70f21e4c2b3a35a8c0","student_field_interest1":"ML","student_field_interest2":"DL","firstname":"Pushkar","lastname":"Jain","contactno":"09991736000","address":"Room no 106 Oxford Caps Upes Road","gender":"Male"}
producer.close(1000,TimeUnit.MILLISECONDS)
答案 1 :(得分:1)
针对生产者和代理的默认Kafka配置值足够保守,在一般情况下,您不应遇到任何超时情况。这些问题通常表明生产者和经纪人之间的网络不稳定/有损。
您得到的异常Failed to update metadata
通常意味着生产者无法访问其中一个中间人,结果是它无法获取元数据。
对于第二个问题,Kafka将自动重试以发送未完全由经纪人确认的消息。如果要在应用程序端超时时捕获并重试,则取决于您,但是如果您遇到1分钟以上的超时,则重试可能不会有太大的不同。无论如何,您都必须找出与代理有关的潜在网络/可达性问题。
以我的经验,通常网络问题是:
nc -z broker-ip 9092
)答案 2 :(得分:1)
“这些超时异常的一般原因是什么?”
我之前看到的最常见原因是由于陈旧的元数据信息:一个代理崩溃了,该代理上的主题分区已故障转移到其他代理。但是,主题元数据信息尚未正确更新,并且客户端仍尝试与失败的代理进行对话以获取元数据信息或发布消息。这会导致超时异常。
Netwowrk连接问题。可以通过telnet broker_host borker_port
代理超载。如果代理充满了高工作负载,或者托管了太多主题分区,则可能发生这种情况。
要处理超时异常,通常的做法是:
解决经纪人方面的问题。确保主题分区已完全复制,并且代理未过载
修复主机名解析或网络连接问题(如有)
调整参数,例如request.timeout.ms
,delivery.timeout.ms
等。我过去的经验是,默认值在大多数情况下都能正常工作。
答案 3 :(得分:1)
如果生产者或消费者无法获得“ advertised.listeners”(protocol:// host:port)的值,则会发生超时异常
通过以下命令检查“ advertised.listeners”属性的配置:
cat $KAFKA_HOME/config/server.properties