问题背景:
client机器是在内网的,无法直接访问到kafka的机器,所以需要走个代理机器,代理服务器可以同时被内网和外网访问。
在外网中,kafka集群都已经搭建好,生产者、消费者都可以正常运行。
问题来了:内网的client机器通过nginx代理访问kafka时候
查看topic列表正常:kafka-topics.sh --zookeeper localhost:2181 --list
创建topic正常:kafka-topics.sh --zookeeper localhost:2181 --create --topic emmp_eva_time --partitions 2 --replication-factor 2
但是生产者和消费者均异常:报错信息忘记截图了,大概的意思就是连接超时
解决思路:
很明显是网络层面的问题,首先,我们来看看kafka的交互的原理:
原理文章这篇写的比较好:
盗一张图:
1. producer 先从 zookeeper 的 "/brokers/.../state" 节点找到该 partition 的 leader
2. producer 将消息发送给该 leader
3. leader 将消息写入本地 log
4. followers 从 leader pull 消息,写入本地 log 后 leader 发送 ACK
5. leader