kafka的分区模式?

当别人问这个问题的时候,别人肯定是想你是否看过源码。是否针对不同场景改过kafka的分区模式
这是别人最想知道的是,你的message如何负载均衡的发送给topic的partition
我们用kafka的时候,可以动态指定partition,也可以不指定partition
当我们动态指定了partition的时候,kafka会将消息发送到指定的partition
如果没有指定partition
这就是关键了,
如何让这些消息,均衡的发送给每个partition
先看看发送消息的方式

kafka首先判断partition,如果有partition就发送到指定的partition
如果没有,就看有没有key
如果有key就将,key弄成字节,然后用个算法,搞成整数,然后除以partition的个数,最后的余数就是partition的所在
如果partition,和key都没有的时候,源码弄了一个int类型的counter,从0开始,每来一条消息就累加,用counter除以partition的个数的余数就是partition的所在
这样就打到了每个partition的均衡了
【大侠】   ?? 2017/8/25 14:02:17
当然了,我们也可以自己定义partition
 某些人用partition指定分区数发消息,如果又有人不指定partition,key,就会发生负责不均衡
你设置了Key,只能保证你自己均衡了
但是要是有其他人指定某个partition发消息呢
【大侠】   ?? 2017/8/25 14:09:14
别个是,1,2,3,4,这是Key的kafka的分的partition,你指定了就变成了1111
【大侠】   ?? 2017/8/25 14:09:40
很多公司,都重写了kafka的分区
时间: 2024-10-09 15:17:00

kafka的分区模式?的相关文章

Kafuka面试(整合Kafka两种模式区别)

整合Kafka两种模式说明 ★面试题:Receiver & Direct 开发中我们经常会利用SparkStreaming实时地读取kafka中的数据然后进行处理,在spark1.3版本后,kafkaUtils里面提供了两种创建DStream的方法: 1.Receiver接收方式: KafkaUtils.createDstream(开发中不用,了解即可,但是面试可能会问) Receiver作为常驻的Task运行在Executor等待数据,但是一个Receiver效率低,需要开启多个,再手动合并数

MBR和GUID分区模式的区别

MBR分区为常用分区模式. GUID分区不常用,为新分区模式,现今预装WIN8默认为GUID分区,各有好处及缺陷. 最关键的是MBR分区方案无法支持超过2TB容量的磁盘,也即3TB硬盘以MBR分区方案分区,有三分之一容量会认不到. 以GUID 分区表(GPT)方案分区则可认到最大18 EB(18X1024GB) 容量的磁盘,新技术好是好,可是:现今大多电脑2TB以上硬盘只作数据盘用的话,在Windows 7/8系统下只需要将硬盘转换为GPT形式即可.但是如果将GPT硬盘作为系统盘,则必须使用采用

关于Flink slot 和kafka topic 分区关系的说明

今天又有小伙伴在群里问 slot 和 kafka topic 分区(以下topic,默认为 kafka 的 topic )的关系,大概回答了一下,这里整理一份 首先必须明确的是,Flink Task Manager 的 slot 数 和 topic 的分区数是没有直接关系的,而这个问题其实是问的是: 任务的并发数与 slot 数的关系 最大并发数 = slot 数 这里有两个原因:每个算子的不同并行不能在同一slot,不同的算子可以共享 slot ,所以最大并行度 就等于 slot 数. 这样就

kafka consumer 分区reblance算法

转载请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/6238029.html 最近需要详细研究下kafka reblance过程中分区计算的算法细节,网上搜了部分说法,感觉比较晦涩且不太易懂,还是自己抠源码比较简便一点. kafka reblance计算部分代码如下: class RangeAssignor() extends PartitionAssignor with Logging { def assign(ctx: AssignmentCon

kafka 自定义分区器

package cn.xiaojf.kafka.producer; import org.apache.kafka.clients.producer.Partitioner; import org.apache.kafka.common.Cluster; import org.apache.kafka.common.PartitionInfo; import org.apache.kafka.common.utils.Utils; import java.util.List; import ja

linux磁盘分区模式

模式一:MBR 1)主分区不超过四个 2)单个分区容量最大2TB 模式二:GPT 1)主分区个数“几乎”没有限制(原因:在GPT的分区表中最多可以支持128个主分区) 2)单个分区的容量“几乎”没有限制(原因:单个分区的容量可以达到18EB=18*1024PB=18*1024*1024TB) 3)缺点:在GPT的主分区中不适合安装X86架构的系统(即32位的操作系统)

五 数据组织模式 2) 分区模式 代码

简单4个分区. package com.rocky.mr.partition; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.rocky.util.TimeUtils; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; import org.apa

在非LVM分区模式中root文件系统扩容

如果安装Linux系统时选择标准分区,会在后续需要扩容时带来麻烦.有时候我们会发现"/" 文件系统空间使用率接近100%,这时就需要进行扩容.如果安装系统时我们采用LVM分区,扩容就很方便,但是如果我们采用了标准分区方式,这时扩容就有些麻烦了. 扩容前提:必须保证是最后一个分区挂载到 "/"下,在这里我们可以看到最后一个分区为/dev/sda3   具体扩容步骤: 1.增加物理磁盘大小 2.增加分区大小(主要通过fdisk /dev/sda 命令 输入d删除最后一个

磁盘分区模式

一.MSDOS(MBR)分区表格式与限制 早期的Linux分区格式,是为了兼容Windows的磁盘,因此使用了支持Windows的MBR(Master Boot Record,主要开机记录区)来处理开机管理程序与分区表!而开机管理程序记录区与分区表主放在第一个扇区,有512bytes的大小,有两个主要数据 1.主要启动记录区(MBR),安装开机管理程序的地方,有446bytes 2.分区表(partition table),记录整个磁盘分区的状态,有64bytes 原文地址:https://ww