外网通过python开发Kafka生产者出现KafkaTimeoutError:Timeout after waiting for 10 secs

在本地内网测试都能发送成功,消费者也能消费到,把测试脚本发到外网的主机运行脚本出现发不出去,且没报错,后面通过Kafka发送的回调函数发现有KafkaTimeoutError:Timeout after waiting for 10 secs错误

Python测试脚本:

import json
from kafka import KafkaProducer

def send_method_bigjson(bootstrap_servers, topic_name, data):
    producer = KafkaProducer(bootstrap_servers=bootstrap_servers,
                             value_serializer=lambda v: json.dumps(v).encode('utf-8'))
    
    try:
        future = producer.send(topic_name, data) #通过回调函数获取发送信息
        record_metadata = future.get(timeout=10)

        print("future对象:", record_metadata)
        print("======================================================")
        print("接收的topic:", record_metadata.topic)
        print("partition_ID:", record_metadata.partition)
        print("offset:", record_metadata.offset)
        print("==========发送成功============")
    except Exception as e:
        print(str(e))
    success = True

    producer.close()


if __name__ == '__main__':
    conf = {
        'bootstrap_servers': '外网IP:9092',
        'topic_name': 'testTopic'
    }

    send_method_bigjson(conf['bootstrap_servers'], conf['topic_name'], "hello world")

开始分析错误原因,是不是外网访问不到Kafka主机或者网络防火墙,端口问题,通过一系列的ping 主机和telnet端口发现并不是这些原因,查看Kafka日志也没问题,后面查到是Kafka配置的监听有误,没有配置监听外网ip的listeners

打开Kafka的server.properties配置项配置

listeners=PLAINTEXT://内网IP:9092

advertised.listeners=PLAINTEXT://外网IP或域名:9092

host.name=内网IP

advertised.host.name=外网IP或域名

advertised.listeners没有配置的话默认使用listeners的内网IP,所以通过外网生成消息发送不出去,

修改配置重启Kafka服务就能解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值