KafkaTimeoutError 问题记录

具体报错如下

KafkaTimeoutError: Batch for TopicPartition(topic='dev-env-topic', partition=0) containing 1 record(s) expired: 30 seconds have passed since batch creation plus linger time。

影响最小的最快解决办法:假设Kafka集群地址是10.10.10.10-11,

vim /etc/hosts
# 补充Kafka 的IP和hostname映射如 
10.10.10.10   Kafka-host1
10.10.10.11   Kafka-host2

排查过程,及原因分析

遇到网络问题,经过排查,和网络无关。

kafka-python的issue里或是和很多搜索引擎找到的答案都说让去配置一个端口,但实际上我的以下配置是空的,因为用的是CM部署的Kafka

查询该问题是,遇到最多的解决方案就是让该Kafka服务端配置listeners、advertised.listeners

advertised.listeners
The configuration items in server.properties to solve the problem are these two:
listeners
advertised.listeners

I tried several combinations:
success:

listeners=PLAINTEXT://:9102
advertised.listeners=PLAINTEXT://192.168.0.136:9102
server can't start:

listeners=PLAINTEXT://192.168.0.136:9102
advertised.listeners=PLAINTEXT://192.168.0.136:9102
timeout error:

listeners=PLAINTEXT://:9102
advertised.listeners=PLAINTEXT://:9102

直到在issue看到下面这个反馈,才恍然醒悟过来,我也遇到了和他同样的问题,因为我代码里使用IP:Port去访问的Kafka,

所以去客户端配置以下hosts映射,此问题解决

后面据此又去了解了下为何,如果远程主机使用Kafka的IP地址来访问Kafka集群,通常情况下是不需要主机名的。IP地址足够用于确保网络通信。但是,有些情况下可能仍然需要主机名,具体原因如下:

  • 1. 安全性:使用主机名可以提供更好的安全性。通过使用主机名,可以配置防火墙和网络策略,限制只有特定主机名可以连接到Kafka集群。这样可以增加对集群的访问控制和安全性。
  • 2. SSL/TLS证书:如果Kafka集群启用了SSL/TLS加密,那么客户端连接时需要提供有效的SSL证书。在SSL证书中,通常会使用主机名作为标识。因此,客户端需要使用主机名来与Kafka集群进行安全连接。
  • 3. 高级功能:有些高级功能,例如Kafka的Kerberos认证和授权,可能需要使用主机名来进行配置和身份验证。 总的来说,大多数情况下,使用IP地址就足够连接到Kafka集群。但在一些特殊情况下,使用主机名可以提供更好的安全性和支持高级功能的能力。具体是否需要主机名还取决于你的特定使用场景和需求。

参考文章:

 KafkaTimeoutError · Issue #1184 · dpkp/kafka-python (github.com)

使用IP连接的kafka为什么依然需要hostname_kafka hostname-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值