赞
踩
回顾已知信息,kafka集群由多个broker服务器组成。集群中会有一个controller broker
,去均衡每个broker上的每个主题下分区leader副本的分布(应使同topic下的不同分区的leader副本分布在不同的broker)、创建主题、删除主题、调整其他broker等
kafka实现高可用和可靠性的手段之一就是它的副本机制,一个分区含有一个leader副本,其余皆为follower副本,不向外提供服务。其中详细的介绍,可查看该博客kafka 可靠性保证
这里再简单说明一下副本机制:
每个分区的leader负责维护和跟踪ISR中所有follower滞后的状态。当producer发送一条消息到broker后,leader写入消息并复制到ISR中所有follower。消息复制延迟受最慢的follower限制,重要的是快速检测慢副本,follower从leader同步数据有一些延迟时间,任意一个超过阈值replica.lag.time.max.ms都会把follower剔除出ISR,移入OSR。
当leader副本crash时,就需要从follower副本中选举出一个新的leader副本,其中这涉及到一个参数unclean.eader.election = false/true
,false表明leader副本只能从ISR列表中选取一个follower副本;true则表明也可从OSR列表中选取,即所有的follower副本都有可能成为leader副本,但可能会存在选举成功的新leader副本没有完全同步到原本leader副本中对消费者可见的数据。
极端情况下,如果该分区中ISR中的所有副本都crash了,那么数据的一致性与可靠性就无法保证了,如果此时想确保系统的可用性,就得允许leader副本能从OSR中选取,即设置unclean.eader.election = true
,这实际是在系统可用性和数据可靠性之间做的取舍
在基于 Kafka 的分布式消息队列中,ZooKeeper 的作用有 Broker 注册、Topic 注册、Producer 和 Consumer 负载均衡、维护 Partition 与 Consumer 的关系、记录消息消费的进度以及 Consumer 注册等。
kafka中有消费者组的概念,一个主题的分区只能被消费者组中的一个消费者消费,消费的消费者并不固定,可能是消费者组中的任意一个(具体看均衡策略),但强调每个分区只能被其中一个消费者消费,这只是在消费者组的层次下。不同消费者组间并没有该约束。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。