Apache kafka 卡夫卡制作人处理与经纪人失去联系的问题

Apache kafka 卡夫卡制作人处理与经纪人失去联系的问题,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,使用如下所示的生产者配置,我正在创建一个在整个应用程序中使用的单例生产者: properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka.consul1:9092,kafka.consul2:9092"); properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getNam

使用如下所示的生产者配置,我正在创建一个在整个应用程序中使用的单例生产者:

properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka.consul1:9092,kafka.consul2:9092");
properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.setProperty(ProducerConfig.ACKS_CONFIG, "1");

我已连接到k8s托管的卡夫卡群集。代理的
播发。侦听器
配置为返回IP地址而不是主机名。虽然正常情况下一切正常,但问题发生在Kafka重新启动时,有时IP地址会更改。由于生产者只知道旧的IP,它一直试图连接到该主机发送消息,但没有消息通过

我观察到,当发送失败时,会引发
org.apache.kafka.common.errors.TimeoutException
异常。当前,消息以异步方式发送:

producer.send(data,
                (RecordMetadata recordMetadata, Exception e) -> {
                    if (e != null) {
                        LOGGER.error("Exception while sending message to kafka", e);
                    }
                });


现在应该如何处理Timeoutexception?鉴于生产者是在整个应用程序中共享的,在回调中关闭和重新创建听起来并不正确。

根据
TimeoutException
上的JavaDocs,是一个可重试的异常,可以通过增加生产者的
重试次数来处理

在中,您可以找到有关
重试
配置的详细信息:

重试(默认值0):设置大于零的值将导致客户端重新发送发送失败且可能出现暂时错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。允许在不将max.in.flight.requests.per.connection设置为1的情况下重试可能会更改记录的顺序,因为如果将两个批发送到单个分区,并且第一个批失败并重试,但第二个成功,则第二个批中的记录可能会首先出现


根据上的JavaDocs,
TimeoutException
是一个可重试的异常,可以通过增加生产者的
重试次数来处理

在中,您可以找到有关
重试
配置的详细信息:

重试(默认值0):设置大于零的值将导致客户端重新发送发送失败且可能出现暂时错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。允许在不将max.in.flight.requests.per.connection设置为1的情况下重试可能会更改记录的顺序,因为如果将两个批发送到单个分区,并且第一个批失败并重试,但第二个成功,则第二个批中的记录可能会首先出现


您需要重新启动/删除您的java应用正在运行的pod。我的java应用没有在pod中运行。只有卡夫卡是。@calvinkrishy下面回答了您的问题吗?您需要重新启动/删除运行java应用程序的pod我的java应用程序没有在pod中运行。只有卡夫卡是。@calvinkrishy在下面回答了你的问题吗?我发现它会重试连接到同一IP/主机,而不会重新初始化连接。我发现它会重试连接到同一IP/主机,而不会重新初始化连接。