集群和中央控制器

一个独立的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. 09.Django-数据库优化

    Django查询数据库性能优化 现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import mo ...

  2. (六)logback.xml 配置详解

    原文链接:https://www.cnblogs.com/taiyonghai/p/9290641.html,https://blog.csdn.net/A615883576/article/deta ...

  3. Selenium上传文件方法大全

    最好的方法:调js 其他方法: Python pywin32库,识别对话框句柄,进而操作 SendKeys库 autoIT,借助外力,我们去调用其生成的au3或exe文件. keybd_event,跟 ...

  4. 030.Kubernetes核心组件-Scheduler

    一 Scheduler原理 1.1 原理解析 Kubernetes Scheduler是负责Pod调度的重要功能模块,Kubernetes Scheduler在整个系统中承担了"承上启下&q ...

  5. 'ipconfig' 不是内部或外部命令,也不是可运行的程序 或批处理文件

    今天在学习的时候需要找本地ip地址,可是在命令行窗口却显示 百度之后发现原来是环境变量没配置的问题(其实之前是ok的,但应该是anconda安装的时候点了那个一键设置环境变量搞得本地的path里的数据 ...

  6. 鼠标悬停,使用css切换图片

    鼠标悬停,使用css切换图片 当鼠标悬停在li上面切换另一张图片,只需添加下述css样式即可

  7. java scoket Blocking 阻塞IO socket通信四

    记住NIO在jdk1.7版本之前是同步非阻塞的,以前的inputsream是同步阻塞的,上面学习完成了Buffer现在我们来学习channel channel书双向的,以前阻塞的io的inputstr ...

  8. vim/vm命令后提示错误:Found a swap file by the name ".dockerfile.swp"

    今天在使用docker时,使用vim命令操作dockerfile文件,提示如下错误: 错误原因,是由于上一次在操作该文件时,异常退出,然后系统生成了一个dockerfile.swp文件,该文件是个隐藏 ...

  9. Flask项目实战:创建电影网站-创世纪(1)

    以后要养成写博客的习惯,用来做笔记.本人看的东西很多很杂,但因为工作中很少涉及,造成看了之后就忘,或者看了就看了,但是没有融入的自己的知识体系里面. 写博客一方面是做记录,一方面是给这段时间业余学习的 ...

  10. 【博弈】HDU - 5963 朋友

    题目 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双 ...