史上最全的kafka知识解析 kafka作用是什么( 二 )


每一个Topic的信息被切分为多个Partitions 。若Partition数量设置成1个 , 则可以保证消息消费的顺序性 。如果某Topic有N个Partition , 集群有N个Broker , 那么每个Broker存储该topic的一个Partition 。如果某Topic有N个Partition , 集群有(N+M)个Broker , 那么其中有N个Broker存储该Topic的一个Partition , 剩下的M个Broker不存储该Topic的Partition数据 。如果某Topic有N个Partition , 集群中Broker数目少于N个 , 那么一个Broker存储该Topic的一个或多个Partition 。在实际生产环境中 , 尽量避免这种情况的发生 , 这种情况容易导致Kafka集群数据不均衡 。当Broker收到消息 , 根据分区算法选择将其存储到哪一个 Partition 。其路由机制为优先按照指定Partition来路由;若未指定patition但指定key , 则通过对key的value进行hash选出一个patition;如果patition和key都未指定 , 则轮询选出一个patition 。
Offset:偏移量 , 分区中的消息位置 , 由Kafka自身维护 , Consumer消费时也要保存一份Offset以维护消费过的消息位置 。Replication:同一个Partition可能会有多个副本 , 多个副本之间数据是一样的 , 增加容错性与可扩展性 。注:
当集群中的有Broker挂掉的情况 , 系统可以主动的使用Replication提供服务 。系统默认设置每一个Topic的Replication系数为1 , 可以在创建Topic时单独设置 。Replication的基本单位是Topic的Partition 。所有的读和写都由Leader进 , Followers只是做为数据的备份 。Follower必须能够及时复制Leader的数据 。
Replication Leader:一个Partition的多个副本上 , 需要一个Leader负责该Partition上与Producer和Consumer交互 。一个Partition只对应一个Replication Leader 。Replication Follower:Follower跟随Leader , 所有写请求都会广播给所有Follower , Follower与Leader保持数据同步 。ReplicaManager:负责管理当前Broker所有分区和副本的信息 , 处理KafkaController发起的一些请求 , 副本状态的切换、添加/读取消息等 。Rebalance 。消费者组内某个消费者实例挂掉后 , 其他消费者实例自动重新分配订阅主题分区的过程 。Rebalance是Kafka消费者端实现高可用的重要手段 。Kafka通过Zookeeper管理集群配置 , 选举Leader , 以及在Consumer Group发生变化时进行Rebalance 。
Kafka的复制机制如何将所有Replication均匀分布到整个集群为了更好的做负载均衡 , Kafka尽量将所有的Partition均匀分配到整个集群上 。一个典型的部署方式是一个Topic的Partition数量大于Broker的数量 。同时为了提高Kafka的容错能力 , 也需要将同一个Partition的Replication尽量分散到不同的机器 。如果所有的Replication都在同一个Broker上 , 那一旦该Broker宕机 , 该Partition的所有Replication都无法工作 , 也就达不到HA的效果 。同时 , 如果某个Broker宕机了 , 需要保证它上面的负载可以被均匀的分配到其它幸存的所有Broker上 。
Kafka分配Replication的算法如下:
将所有Broker(假设共n个Broker)和待分配的Partition排序 。将第i个Partition分配到第(i % n)个Broker上 。将第i个Partition的第j个Replication分配到第((i + j) % n)个Broker上 。HW高水位与LEOHW是High Watermark的缩写 , 俗称高水位 , 它标识了一个特定的消息偏移量(Offset) , 消费者只能拉取到这个Offset之前的消息 。
如图所示 , 它代表一个日志文件 , 这个日志文件中有 9 条消息 , 第一条消息的Offset(LogStartOffset)为0 , 最后一条消息的Offset为8 , Offset为9的消息用虚线框表示 , 代表下一条待写入的消息 。日志文件的HW为6 , 表示消费者只能拉取到Offset在0至5之间的消息 , 而Offset为6的消息对消费者而言是不可见的 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: