哥们,这个问题搞定了吗?把producer.close();
去掉,后面加个休眠时间试试。这样处理有没有解决问题?
道理是一样的,都是bootstrap中有不可用的。如果我集群就是50,55,56呢,只不过55和56挂掉了(replica有3份)。
启动之初,producer应该随便成功连一个broker就能获取到集群的全貌吧。 先在bootstrap中随便选一个去获取metadata,不行就换一个,直到bootstrap中所有的都不行才报错。 按照文档的说法应该是这样的吧? 但是我在源码中并没有找到相关的流程,实际中kafka也不是这样做的
假设一开始一切正常,producer要发100条消息,发到50条的时候,集群中有个一个broker挂了
这个原有的producer是不会有问题的,剩下的50条消息还能写进去
但是如果这个时候(集群中一个broker挂掉期间)有一个新的producer来发消息,这个新producer可能会出上面的问题
按理来说,集群中broker挂掉期间,新的producer应该还是能正常获取集群信息,写入消息吧。
我想找到答案:kafka是不是按文档中那样做的 “bootstrap中一个不行换另一个去尝试”?
从我的实验以及查阅源码都没有发现它会更换
希望大家自己测试一下,反馈下结果。 或者知道相关流程或源码的大神指点一二。
当然也可能kafka就是这样的。当然我觉得这是一个缺陷
P.S. 之前发邮件到kafka-dev mailing list都没人鸟,无意中发现这个网站,博主还是挺厉害的,希望多交流
我觉得你应该在设置为有的集群,发送期间,进行故障转移做测试,因为在启动之初,空节点,kafka是获取不到系统全貌的。