Java 发送到主题时引发的TimeoutException
我已经使用KafkaTemplateBean创建了sender类来将负载发送到主题 使用SenderConfiguration类中的某些配置 发送方类Java 发送到主题时引发的TimeoutException,java,spring-boot,apache-kafka,spring-restcontroller,spring-kafka,Java,Spring Boot,Apache Kafka,Spring Restcontroller,Spring Kafka,我已经使用KafkaTemplateBean创建了sender类来将负载发送到主题 使用SenderConfiguration类中的某些配置 发送方类 @Component public class Sender { private static final Logger LOGGER = (Logger) LoggerFactory.getLogger(Sender.class); @Autowired private KafkaTemplate<String
@Component
public class Sender {
private static final Logger LOGGER = (Logger) LoggerFactory.getLogger(Sender.class);
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void send(String topic, String payload) {
LOGGER.info("sending payload='{}' to topic='{}'", payload, topic);
kafkaTemplate.send(topic, "1", payload);
}
}
简单地说,控制器包含
@RestController
public class Controller {
protected final static String HELLOWORLD_TOPIC = "helloworld.t";
@Autowired
private Sender sender;
@RequestMapping("/send")
public String SendMessage() {
sender.send(HELLOWORLD_TOPIC, "message");
return "success";
}
}
例外是
2017-12-20 09:58:04.645 INFO 10816 --- [nio-7060-exec-1] o.a.kafka.common.utils.AppInfoParser : Kafka version : 0.10.1.1
2017-12-20 09:58:04.645 INFO 10816 --- [nio-7060-exec-1] o.a.kafka.common.utils.AppInfoParser : Kafka commitId : f10ef2720b03b247
2017-12-20 09:59:04.654 ERROR 10816 --- [nio-7060-exec-1] o.s.k.support.LoggingProducerListener : Exception thrown when sending a message with key='1' and payload='message' to topic helloworld.t:
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
使用包含键的方法
kafkaTemplate.send(topic, key, payload);
不清楚您想要使用什么键值,但它应该均匀地分布在主题的分区计数中。例如,分区计数范围内的随机数 这意味着你的经纪人没有在运作。
检查server.log并在必要时重新启动代理此类错误的可能性很小
- 为此,如果您得到的输出意味着kafka borker正在运行,请尝试使用telnet localhost 9092进行telnet
在60000毫秒后更新元数据失败。
要绕过此问题,请使用kafka命令行选项手动创建kafka- 将“bootstrap.servers”属性或--broker list选项更改为0.0.0.0:9092
- 在2个属性中更改server.properties
- listeners=PLAINTEXT://your.host.name:9092 to listeners=PLAINTEXT://:9092
- 播发的.listeners=PLAINTEXT://your.host.name:9092到播发的.listeners=PLAINTEXT://localhost:9092
希望有帮助 你需要看看生产工厂的内部结构。。。或者有一个包含键的send方法,不仅仅是主题和值。例如,我找到了KEY\u SERIALIZER\u CLASS\u CONFIG和KEY\u SERIALIZER\u CLASS\u DOC。但是它们和异常之间没有关系,因为我认为
ProducerConfig
是错误的类,在60000毫秒后,未能更新元数据。
-通常只是意味着代理没有运行。它仍然抛出除了密钥之外,还有相同的异常。向主题helloworld发送密钥为='1'且有效负载为='HHSHS'的消息时引发异常。t:那么,异常与密钥无关,但这是您提出的问题。显示stacktrace的其余部分
2017-12-20 09:58:04.645 INFO 10816 --- [nio-7060-exec-1] o.a.kafka.common.utils.AppInfoParser : Kafka version : 0.10.1.1
2017-12-20 09:58:04.645 INFO 10816 --- [nio-7060-exec-1] o.a.kafka.common.utils.AppInfoParser : Kafka commitId : f10ef2720b03b247
2017-12-20 09:59:04.654 ERROR 10816 --- [nio-7060-exec-1] o.s.k.support.LoggingProducerListener : Exception thrown when sending a message with key='1' and payload='message' to topic helloworld.t:
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
kafkaTemplate.send(topic, key, payload);