1 写入过程负载均衡:
我们知道写入的时候都要提供broker信息,而每个broker都可以获取到topic的元数据信息。
在发送前,producer就已经将record分区,可能是自定义或默认分区。达到发送阈值后将相同分区的数据批量发送。
根据分区,自然知道对应的lead broker所在节点。由此达到负载均衡。
2 controller broker.
kafka所有的broker都会在zookeeper注册。但是同一时刻只会存在一个controller. 其它的叫fellow。
通过zookeeper 的 get /controller可以获取controller信息。
controller作用:监控所有其它的broker,如果其中一个挂了,会将该broker下所有分区的副本重新选择一个leader, 由该leader进行读写操作。(注意:副本在kafka信息中,以broker编号的形式体现)
3 kafka broker及partition信息保存
controller信息通过zookeeper注册,先注册的即为controller. 当controller宕机后,剩余的broker会注册为controller.
broker荡机后,controller会将分区和lead信息刷新到zookeeper,其它broker自然会知道。
参考:kafka写入源码过程 https://www.jianshu.com/p/afb2c314fee0