Kafka发送消息至test-topic时出现TimeoutException错误求助
Kafka生产者发送超时(TimeoutException)排查与解决
问题重现
执行以下命令启动生产者与消费者:
kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic test-topic kafka-console-consumer.bat --bootstrap-server 127.0.0.1:9092 --topic test-topic --from-beginning
发送消息时触发错误:
ERROR Error when sending message to topic test-topic with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test-topic-0:120001 ms has passed since batch creation
当前server.properties配置:
broker.id=1 listeners=PLAINTEXT://:9092 advertised.listeners=PLAINTEXT://127.0.0.1:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=D:/DataMining/kafka_2.12-3.5.1/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.retention.check.interval.ms=300000 zookeeper.connect=localhost:5181 zookeeper.connection.timeout.ms=18000 group.initial.rebalance.delay.ms=0
排查与解决方案
1. 确认Kafka Broker运行状态
- 执行
jps命令,检查是否存在Kafka进程。若未运行,启动Kafka服务:.\bin\windows\kafka-server-start.bat .\config\server.properties - 查看Kafka日志目录(
D:/DataMining/kafka_2.12-3.5.1/kafka-logs)下的启动日志,确认无ZooKeeper连接失败、目录权限不足等报错。
2. 验证ZooKeeper连接有效性
- 启动ZooKeeper客户端,检查Kafka Broker注册状态:
.\bin\windows\zookeeper-shell.bat localhost:5181 - 在客户端中输入
ls /brokers/ids,若返回[1](与配置的broker.id=1对应),说明Kafka已成功注册到ZooKeeper。
3. 检查端口连通性
- 用PowerShell测试9092端口是否开放:
Test-NetConnection 127.0.0.1 -Port 9092 - 执行
netstat -ano | findstr 9092,确认Kafka进程正在监听该端口,同时检查防火墙是否拦截了9092端口。
4. 临时调整生产者超时参数测试
- 启动生产者时延长超时时间,验证是否为参数配置过短导致:
kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic test-topic --producer-property delivery.timeout.ms=300000 --producer-property request.timeout.ms=60000 - 若调整后能正常发送消息,需进一步排查Broker端的性能或连接问题,而非仅依赖参数调整。
5. 检查日志目录权限
- 确认
D:/DataMining/kafka_2.12-3.5.1/kafka-logs目录具备读写权限,Kafka需写入日志文件到该目录,权限不足会导致Broker无法处理消息。
6. 重置Kafka元数据(极端场景)
- 若以上操作无效,尝试重置元数据:
- 停止Kafka与ZooKeeper服务
- 删除
kafka-logs目录下所有文件 - 启动ZooKeeper,执行
zookeeper-shell.bat localhost:5181,输入rmr /brokers删除Broker注册信息 - 重新启动Kafka,创建测试主题后再尝试发送消息
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

