Zookeeper 协调控制
1. 管理broker与consumer的动态加入与离开。
每个broker启动后,会在zookeeper上注册一个临时的节点(broker
registry):包含broker的ip地址和端口号,所存储的topics和partitions信
息。
每个consumer启动后会在zookeeper上注册一个临时的节点(consumer
registry):包含consumer所属的consumer group以及订阅的topics。
2. 触发负载均衡,当broker或consumer加入或离开时会触发负载均衡算法,使得一
个consumer group内的多个consumer的订阅负载平衡。
3. 维护消费关系及每个partion的消费信息。
每个consumer group关联一个临时的owner registry和一个持久的offset registry。对于被订阅的每个partition包含一个owner registry,内容为订阅这个partition的consumer id;同时包含一个offset registry,内容为上一次订阅的offset。
消息交付保证
1. kafka对消息的重复、丢失、错误以及顺序型没有严格的要求。
2. kafka提供at-least-once delivery(交付),即当consumer宕机后,有些消息可能会被重复delivery。
3. 因每个partition只会被每个consumer group内的一个consumer消费,故kafka保证每个partition内的消息会被顺序的订阅。
4. Kafka为每条消息为每条消息计算CRC校验,用于错误检测,crc校验不通过的消息会直接被丢弃掉。