二、kafka 中央控制器、主题、分区、副本
集群和中央控制器
一个独立的Kafka服务器被称为broker。broker用来接收来自生产者的消息,为消息设置偏移量,并把消息保存到磁盘。换句话说,多个kafka实例组成kafka集群,每个实例(server)被称为broker。
broker中央控制器:Kafka集群中多个broker,在Kafka启动时所有的broker会在zk里面注册,只有一个会被选举为broker中央控制器(controller也就是broker的 leader)。
中央控制器产生:
中央控制的主要工作为:
管理整个集群中的分区
监控副本的状态
这些工作如:
leader副本故障,由中央控制器负责为该partition重新选举新的leader 副本
当检测到同步列表发生变化,有中央控制器通知集群中所有broker更新其元数据缓存信息
当增加某个topic分区的时候也会由中央控制器管理分区的重新分配工作
broker中央控制器的选举过程:
当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader(抢先注入),其余的都是follower。当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader。
主题、分区
主题就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
每一个主题可以被分为若干个分区,一个分区就是一个提交日志。消息以追加的方式写入分区
对于每一个topic,Kafka集群都会有一个或者多个分区。分区角色有分为Leader分区和Follower分区。每个分区都是有序且顺序不可变的记录集,并且不断地追加到log文件中。
由于主题一般包含几个分区,因此无法在整个主题范围内保 证消息的顺序,但是同一个分区是有序的。
每个分区是一个有序的,不可变的消息序列,新的消息 不断追加到这个有组织的有保证的日志上。分区会给每 个消息记录分配一个顺序ID号 – 偏移量, 能够唯一地标 识该分区中的每个记录。
Kafka集群保留所有发布的记录,不管这个记录有没有被 消费过,Kafka提供可配置的保留策略去删除旧数据。 例如:如果将保留策略设置为两天,在记录公布后两天 可用于消费,之后它将被丢弃以腾出空间
为什么设计分区?
为了并发读写,加快读写速度;通过这种优化,可以极大的提高并发响应
运用多分区的存储,利于数据的均衡;
加快数据的康复速率。如:一旦某台机器挂了,全部集群只需要康复一部分数据,可加快故障康复的时间。
分区策略:
轮训策略
如果键值为null,并且使用了默认的分区器,Kafka会根据轮训(Random Robin)策略将消息均匀地 分布到各个分区上
散列策略
如果键值不为null,并且使用了默认的分区器,Kafka会对键进行散列,然后根据散列值把消息映射到 对应的分区上
黏性分区器
很多时候消息是没有指定Key的。而Kafka 2.4之前的策略是轮询策略,这种策略在使用中性能比较低。所以2.4中版本加入了黏性分区策略(Sticky Partitioning Strategy)。
黏性分区器(Sticky Partitioner)主要思路是选择单个分区发送所有无Key的消息。一旦这个分区的batch已满或处于“已完成”状态,黏性分区器会随机地选择另一个分区并会尽可能地坚持使用该分区——象黏住这个分区一样。
自定义策略
默认分区器是使用次数最多的分区器。除了散列分区之外,用户可以根据需要对数据使用不一样的分 区策略
总结一下 broker、topic、分区、副本的关系
1.broker与副本:一个broker就是一台服务器,副本是针对服务器的,副本数可以是1到broker数,比如2个服务器副本数就是1-2.
2.broker 和分区:分区会尽可能的均匀分在broker上,比如3个broker,10个分区,那么每个broker上就是3个分区
3.分区和副本:有多少个副本,分区的数据都有多少个重复的。
3.topic与其他:broker、分区、副本都是为了保存好topic数据。topic的数据分散各个分区,假设数据均匀分布那每个分区都是1/分区数 的topic数据。当副本数=broker数时就代表每个broker上都有一份完成的topic数据,如果副本数 < broker数时 每个broker都只有部分的topic数。
如下图无机架的情况下,5个broker-10个分区-3个副本分布。
这种情况下broker-0 上就有p0 p5 p4 p9 p3 p8 六个分区的数据。这个无机架的情况,每个增加一个副本分区位置都会位移+1。
二、kafka 中央控制器、主题、分区、副本的更多相关文章
- 入门大数据---Kafka深入理解分区副本机制
一.Kafka集群 Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息.每个 broker 都有一个唯一标识 broker.id,用于标识自己在集群中的身份,可以在配置文 ...
- (二)Kafka动态增加Topic的副本(Replication)
(二)Kafka动态增加Topic的副本(Replication) 1. 查看topic的原来的副本分布 [hadoop@sdf-nimbus-perf ~]$ le-kafka-topics.sh ...
- Python 基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控
基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控 By: 授客 QQ:1033553122 1.测试环境 python 3.4 zookeeper- ...
- Kafka实战宝典:Kafka的控制器controller详解
一.控制器简介 控制器组件(Controller),是 Apache Kafka 的核心组件.它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群.集群中任意一 ...
- Kafka动态增加Topic的副本
一.kafka的副本机制 由于Producer和Consumer都只会与Leader角色的分区副本相连,所以kafka需要以集群的组织形式提供主题下的消息高可用.kafka支持主备复制,所以消息具备高 ...
- kafka 日常使用和数据副本模型的理解
kafka 日常使用和数据副本模型的理解 在使用Kafka过程中,有时经常需要查看一些消费者的情况.Kafka健康状况.临时查看.同步一些数据,又由于Kafka只是用来做流式存储,又没有像Mysql或 ...
- 【Kafka】《Kafka权威指南》——分区partition
在上篇的例子里([Kafka]<Kafka权威指南>--写数据), ProducerRecord 对象包含了目标主题.键和值. Kafka 的消息是 一个个 键值对, ProducerRe ...
- Maven入门系列(二)--设置中央仓库的方法
原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...
- Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...
随机推荐
- Python 中的类的继承
class parent(object): def override1(self): print("Parent") class child(parent): def overri ...
- Windows安装多个python解释器
Windows安装多个python解释器 在windows10系统下安装两个不同版本的的python解释器,在通常情况下编译执行文件都是没问题的,但是加载或下载包的时候pip的使用就会出现问题,无 ...
- 非线性规划的Matlab 解法
编写M 文件fun1.m 定义目标函数 function f=fun1(x); % 定义目标函数 f=sum(x.^)+; % .^2是矩阵中的每个元素都求平方.^2是求矩阵的平方或两个相同的矩阵相乘 ...
- Codeforce Round #643 #645 #646 (Div2)
codeforce Round #643 #645 #646 div2 Round #643 problem A #include<bits/stdc++.h> using namespa ...
- 2019-02-12 html的初步学习
前两天看了下python的爬虫,后面的抓包模拟登录实在是难弄,于是暂时放弃,来学学前端知识QAQ <!DOCTYPE html>文档类型符合HTML5标准 <html lang=&q ...
- IP组网实验(使用Cisco Packet Tracer路由器模拟软件)
最近计网课讲到了以太网,第二个计网实验就是IP组网实验.这个实验主要使用了netsim这个路由器模拟软件.怎奈mac上没有,于是用Cisco Packet Tracer进行了一次模拟(其实就是实验中的 ...
- 阿里云用smtp无法发送邮件
无法发送邮件是因为什么网络协议的要求必须要封掉25端口,而这个解封的话弄了很长时间也没有弄开,所以就换了别的方法 这个的话我这块用的是PHPMailer 然后我把这个PHPMailer的配置文件里的 ...
- SpringCloud(一)版本选择
Springboot版本 官网:https://spring.io/projects/spring-boot 在官网上 springboot已经更新到最新2.2.6 Spingcloud版本 官网:h ...
- django xadmin 配置过程
1.拷贝xadmin的一个下的一个xadmin文件夹放到项目里
- 利用c++中的设计灵感,既要学BIM分类信息表,借助GIS完成环境搭建改善
我,一个平平无奇的城市规划专业(建筑专业.路桥专业)大学生,还有一年要毕业,很担心工作以后受到社会的毒打,遂问导师和学长,我要自学点什么技能和软件? 学长A:CAD,SketchUp,PS我都很熟练了 ...