集群和中央控制器

一个独立的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 中央控制器、主题、分区、副本的更多相关文章

  1. 入门大数据---Kafka深入理解分区副本机制

    一.Kafka集群 Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息.每个 broker 都有一个唯一标识 broker.id,用于标识自己在集群中的身份,可以在配置文 ...

  2. (二)Kafka动态增加Topic的副本(Replication)

    (二)Kafka动态增加Topic的副本(Replication) 1. 查看topic的原来的副本分布 [hadoop@sdf-nimbus-perf ~]$ le-kafka-topics.sh ...

  3. Python 基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控

    基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控   By: 授客 QQ:1033553122   1.测试环境 python 3.4 zookeeper- ...

  4. Kafka实战宝典:Kafka的控制器controller详解

    一.控制器简介 控制器组件(Controller),是 Apache Kafka 的核心组件.它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群.集群中任意一 ...

  5. Kafka动态增加Topic的副本

    一.kafka的副本机制 由于Producer和Consumer都只会与Leader角色的分区副本相连,所以kafka需要以集群的组织形式提供主题下的消息高可用.kafka支持主备复制,所以消息具备高 ...

  6. kafka 日常使用和数据副本模型的理解

    kafka 日常使用和数据副本模型的理解 在使用Kafka过程中,有时经常需要查看一些消费者的情况.Kafka健康状况.临时查看.同步一些数据,又由于Kafka只是用来做流式存储,又没有像Mysql或 ...

  7. 【Kafka】《Kafka权威指南》——分区partition

    在上篇的例子里([Kafka]<Kafka权威指南>--写数据), ProducerRecord 对象包含了目标主题.键和值. Kafka 的消息是 一个个 键值对, ProducerRe ...

  8. Maven入门系列(二)--设置中央仓库的方法

    原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...

  9. Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器

    Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...

随机推荐

  1. CentOS 6.X 双网卡绑定配置

    相关环境 主机:Dell PowerEdge R720服务器(背板有4个GE网口) 操作系统:CentOS(RHEL)6.X 网线连接 使用6类网线 将Dell R720 GE网口 0,与交换机A相连 ...

  2. pytorch入门2.0构建回归模型初体验(数据生成)

    pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...

  3. 如何在本地搭建微信小程序服务器

    现在开发需要购买服务器,价格还是有点贵的,可以花费小代价就可以搭建一个服务器,可以用来开发小程序,博客等. 1.域名(备案过的) 2.阿里云注册免费的https证书 3.配置本地的nginx 4.内网 ...

  4. vs2010静态编译qt5.1.0

    本博文参考 http://blog.chinaunix.net/uid-20690340-id-3802197.html 静态库在链接的时候直接写入二进制文件里,这样的好处在于发布的时候无需附带dll ...

  5. 没有国产主机,怎么开发:交叉编译和QEMU虚拟机

    1. 背景 近期国产化的趋势越来越浓,包括国产操作系统.国产CPU等.时隔十多年,QQ for Linux也更新了.做为软件开发人员,"有幸"也需要适配国产化.至于国产化的意义等就 ...

  6. Java 异常处理的十个建议

    前言 Java异常处理的十个建议,希望对大家有帮助~ 本文已上传github: https://github.com/whx123/JavaHome 公众号:捡田螺的小男孩 一.尽量不要使用e.pri ...

  7. Express4.x之API:express

    express()表达式 express的方法 express功能分析 一.express()表达式 创建Express应用程序.express()函数是express模块导出的顶级函数.(相当于HT ...

  8. Flume-1.4.0和Hbase-0.96.0整合

    在使用Flume的时候,请确保你电脑里面已经搭建好Hadoop.Hbase.Zookeeper以及Flume.本文将以最新版的Hadoop-2.2.0.Hbase-0.96.0.Zookeeper-3 ...

  9. (四)Maven项目工程目录约定

    使用maven创建的工程我们称它为maven工程,maven工程具有一定的目录规范,如下: src/main/java 存放项目的.java文件 src/main/resources 存放项目资源文件 ...

  10. 一文梳理JavaScript中的this

    最近零零碎碎看了许多关于this的文章,本着"好记性不如烂笔头"的思想,特在这里整理一下this有关的知识点.[长文警告!!!] 接下来,笔者将按照以下目录对this进行阐述: t ...