doujiang24 / lua-resty-kafka

Lua kafka client driver for the Openresty based on the cosocket API
BSD 3-Clause "New" or "Revised" License
801 stars 274 forks source link

lua-resty-kafka故障转移和恢复问题 #150

Closed BLF2 closed 1 year ago

BLF2 commented 1 year ago

我使用的是openresty1.15.8.2+lua-resty-kafka v0.10,生产环境因为网络抖动或者kafka闪断导致无法重连,总是提示broker not found,然后添加了刷新时间后做了一个测试,大致过程如下:

  1. kafka的配置是3个ip+端口,使用docker容器部署openresty+lua-resty-kafka
  2. 正确启动openresty+lua-resty-kafka,调用接口发现可以将数据写入kafka,
  3. 然后使用iptables限制当前容器对ip1的访问,发现调用接口无法正确写入kafka
  4. 允许容器对ip1的访问,此时调用接口,可以正确写入kafka 具体过程参见 https://blog.csdn.net/codeblf2/article/details/129710869 想问下在ip1被禁止访问的时候,client是不是应该转移到ip2或者ip3连接上?客户端有没有做这块的故障转移?
doujiang24 commented 1 year ago
  1. 这种网络故障,是不会自动转移的,因为会根据 key 哈希到一个 broker
  2. 如果 kafka 自己感知 broker down 了,在 metadata 里摘掉了一个 broker,这个是会自动转移的
BLF2 commented 1 year ago

让大佬见笑了,kafka的leader负责接收消息,follower只从leader同步消息,不接收来自client的消息。当client和kafka leader网络不通的时候,client发现从follower拿到的metadata信息中leader是好好的,所以client端也认为leader是没问题的。只有当leader确实挂了,进行了重新选举,有新的leader出现,client才会切换。感谢大佬的解答。