kafka分区及副本在broker的分配

部分内容參考自:http://blog.csdn.net/lizhitao/article/details/41778193

以下以一个Kafka集群中4个Broker举例,创建1个topic包括4个Partition,2 Replication;数据Producer流动如图所看到的: 
(1)

pic

(2)当集群中新增2节点,Partition添加到6个时分布情况例如以下:

副本分配逻辑规则例如以下: 
在Kafka集群中,每一个Broker都有均等分配Partition的Leader机会。 
上述图Broker Partition中,箭头指向为副本。以Partition-0为例:broker1中parition-0为Leader。Broker2中Partition-0为副本。

上述图种每一个Broker(依照BrokerId有序)依次分配主Partition,下一个Broker为副本,如此循环迭代分配,多副本都遵循此规则。

副本分配算法例如以下: 
将全部N Broker和待分配的i个Partition排序. 
将第i个Partition分配到第(i mod n)个Broker上. 
将第i个Partition的第j个副本分配到第((i + j) mod n)个Broker上.

其实以上的算法是有误的,由于非常明显。每一个topic的分区0都会被分配在broker 0上。第1个分区都分配到broker 1上。直到partition的id超过broker的数据才開始从头開始反复,这样会导致前面几台机器的压力比后面的机器压力更大。

因此。kafka是先随机挑选一个broker放置分区0,然后再按顺序放置其他分区。

例如以下图的情况:

Topic:ljh_test3 PartitionCount:10       ReplicationFactor:2     Configs:
Topic: ljh_test3 Partition: 0 Leader: 5 Replicas: 5,6 Isr: 5,6
Topic: ljh_test3 Partition: 1 Leader: 6 Replicas: 6,7 Isr: 6,7
Topic: ljh_test3 Partition: 2 Leader: 7 Replicas: 7,2 Isr: 7,2
Topic: ljh_test3 Partition: 3 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: ljh_test3 Partition: 4 Leader: 3 Replicas: 3,4 Isr: 3,4
Topic: ljh_test3 Partition: 5 Leader: 4 Replicas: 4,5 Isr: 4,5
Topic: ljh_test3 Partition: 6 Leader: 5 Replicas: 5,7 Isr: 5,7
Topic: ljh_test3 Partition: 7 Leader: 6 Replicas: 6,2 Isr: 6,2
Topic: ljh_test3 Partition: 8 Leader: 7 Replicas: 7,3 Isr: 7,3
Topic: ljh_test3 Partition: 9 Leader: 2 Replicas: 2,4 Isr: 2,4

这里分区0放到了broker5中。分区1–broker6。分区2—broker7….

再看一个样例:

Topic:ljh_test2 PartitionCount:10       ReplicationFactor:2     Configs:
Topic: ljh_test2 Partition: 0 Leader: 2 Replicas: 2,7 Isr: 2,7
Topic: ljh_test2 Partition: 1 Leader: 3 Replicas: 3,2 Isr: 3,2
Topic: ljh_test2 Partition: 2 Leader: 4 Replicas: 4,3 Isr: 4,3
Topic: ljh_test2 Partition: 3 Leader: 5 Replicas: 5,4 Isr: 5,4
Topic: ljh_test2 Partition: 4 Leader: 6 Replicas: 6,5 Isr: 6,5
Topic: ljh_test2 Partition: 5 Leader: 7 Replicas: 7,6 Isr: 7,6
Topic: ljh_test2 Partition: 6 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: ljh_test2 Partition: 7 Leader: 3 Replicas: 3,4 Isr: 3,4
Topic: ljh_test2 Partition: 8 Leader: 4 Replicas: 4,5 Isr: 4,5
Topic: ljh_test2 Partition: 9 Leader: 5 Replicas: 5,6 Isr: 5,6

kafka分区及副本在broker的分配的更多相关文章

  1. 详细解析kafka之kafka分区和副本

    本篇主要介绍kafka的分区和副本,因为这两者是有些关联的,所以就放在一起来讲了,后面顺便会给出一些对应的配置以及具体的实现代码,以供参考~ 1.kafka分区机制 分区机制是kafka实现高吞吐的秘 ...

  2. kafka 分区和副本以及kafaka 执行流程,以及消息的高可用

    1.Kafka概览 Apache下的项目Kafka(卡夫卡)是一个分布式流处理平台,它的流行是因为卡夫卡系统的设计和操作简单,能充分利用磁盘的顺序读写特性.kafka每秒钟能有百万条消息的吞吐量,因此 ...

  3. Kafka集群中 topic数据的分区 迁移到其他broker

    前言 kafka集群扩容后,新的broker上面不会数据进入这些节点,也就是说,这些节点是空闲的:它只有在创建新的topic时才会参与工作.除非将已有的partition迁移到新的服务器上面:所以需要 ...

  4. 二、kafka 中央控制器、主题、分区、副本

    集群和中央控制器 一个独立的Kafka服务器被称为broker.broker用来接收来自生产者的消息,为消息设置偏移量,并把消息保存到磁盘.换句话说,多个kafka实例组成kafka集群,每个实例(s ...

  5. Kafka分区分配策略分析——重点:StickyAssignor

    “ 为什么Kafka在RangeAssigor.RoundRobinAssignor的基础上,又新增了PartitionAssignor,它解决了什么问题?” 背景 用过Kafka的同学应该都知道Ka ...

  6. Kafka技术内幕 读书笔记之(六) 存储层——服务端处理读写请求、分区与副本

    如下图中分区到 日 志的虚线表示 : 业务逻辑层的一个分区对应物理存储层的一个日志 . 消息集到数据文件的虚线表示 : 客户端发送的消息集最终会写入日志分段对应的数据文件,存储到Kafka的消息代理节 ...

  7. Kafka分区分配策略-RangeAssignor、RoundRobinAssignor、StickyAssignor

    引言按照Kafka默认的消费逻辑设定,一个分区只能被同一个消费组(ConsumerGroup)内的一个消费者消费.假设目前某消费组内只有一个消费者C0,订阅了一个topic,这个topic包含7个分区 ...

  8. Kafka分区分配策略(Partition Assignment Strategy)

    众所周知,Apache Kafka是基于生产者和消费者模型作为开源的分布式发布订阅消息系统(当然,目前Kafka定位于an open-source distributed event streamin ...

  9. Kafka 0.8 副本同步机制理解

    Kafka的普及在很大程度上归功于它的设计和操作简单,如何自动调优Kafka副本的工作,挑战之一:如何避免follower进入和退出同步副本列表(即ISR).如果某些topic的部分partition ...

随机推荐

  1. 19 Python标准异常总结 (转)

    Python标准异常总结 AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) ...

  2. [openjudge-动态规划]滑雪

    题目描述 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区 ...

  3. 改变FileUpload文件上传控件的显示方式,选择文件后自动上传

    一.Aspx页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="File ...

  4. [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器

    截至自2017-08-11,支持现世已出的几乎所有PC端浏览器版本判断. 受支持的PC端浏览器列表: Edge IE Chrome Firefox Opera Safari QQ浏览器 360系列浏览 ...

  5. Linux笔记 #09# Tomcat多开以及Nginx负载均衡简单例子

    索引 Tomcat怎样多开.. 1.添加环境变量(最基础.关键的步骤!) 2.改catalina.sh 3.改相关端口 Nginx负载均衡简单例子 Tomcat怎样多开.. 演示一下如何开两个(开n个 ...

  6. Java 文件重命名

    Java 文件重命名 /** * 重命名文件 * @param fileName * @return */ public static void renameFile(String filePath, ...

  7. 复旦大学2016--2017学年第二学期(16级)高等代数II期末考试第六大题解答

    六.(本题10分)  设 $A$ 为 $n$ 阶半正定实对称阵, $S$ 为 $n$ 阶实反对称阵, 满足 $AS+SA=0$. 证明: $|A+S|>0$ 的充要条件是 $r(A)+r(S)= ...

  8. 在myeclipse中使用log4j记录日志

    1.从官方网站下载 jakarta-log4j-1.2.17.tar.gz http://logging.apache.org/log4j/1.2/download.html 2.在eclipse中将 ...

  9. ABAP search help (搜索帮助) 几种种方法

    ABAP search help (搜索帮助) 几种种方法    域范围  ABAP 的搜索帮助有很多种方法,掌握下面的几种基本差不多了 *&------------------------- ...

  10. MapReduce编程:词频统计

    首先在项目的src文件中需要加入以下文件,log4j的内容为: log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j ...