Kafka Broker

  1. kafka 第一个启动的Broker在ZooKeeper中创建一个临时节点/controller,让自己成为控制器。其他Broker启动后在控制器节点上创建Watch对象,便接收节点变更通知。
  2. Kafka利用ZooKeeper来选举控制器,并在节点加入或者退出集群时通知控制器。控制器负责在节点加入或者退出集群时选举分区首领。控制器使用Epoch来防止“脑裂”。
  3. Kafka 使用主题来组织数据,每个主题被分为若干个分区,每个分区有多个副本。每个Broker上面可以保存成百上千个不同主题不同分区的副本。
  4. 副本有两种类型:Leader 副本,Follower 副本。

replica.lag.time.max.ms
为了与首领保持同步,副本一直向首领请求数据,通过查看每一个跟随者请求的偏移量,首领能够知道副本的同步进度。如果10s内,跟随者没有请求任何消息,或者没有请求最新的数据,
它会被认为是不同步的。如果一个副本无法与首领保持一致,那么当首领失效时,它不会成为首领。只有同步副本才可能成为新的首领。

auto.leader.rebalance,enable
除了当前首领之外,每一个分区还有一个首选首领。创建主题时选定的首领就是分区的首选首领。该值默认是true,他会检查首选首领是不是当前的首领,如果不是,且副本是同步的,那么就会触发首领选举,
它会让首选首领成为当前首领。

处理请求

Kafka客户端要自己负责把生产请求和获取请求发送到正确的broker上。如果请求特定分区,且分区首领在另一个broker上,客户端会收到一个非分区首领的错误。

元数据请求,包含了客户端感兴趣的主题列表,服务器端从而得知这些主题所包含的分区,分区包含了哪些副本,哪个副本是首领。元数据请求可以发送给任意一个Broker。
一般情况下,客户端会将这些信息缓存起来,并时不时发送元数据请求来刷新这些信息,从而得知元数据是否发生变更,当客户端接收到非分区首领的错误时,会先刷新元数据然后再重新发起正确的请求。
metadata.max.age.ms
客户端发送元数据请求的频率。

生产请求

包含首领副本的Broker在收到请求时,会对请求做一些验证,之后写入本地文件系统缓存,并不保证何时刷新到磁盘上。因为他依赖复制功能保证持久性。
在写入分区的首领之后,brokers会根据acks参数来响应。如果acks=all,则请求会被保存到一个叫做炼狱的缓冲区里,直到首领发现所有的跟随者副本都复制了消息,才会发出响应。

获取请求

并不是所有保存到分区首领上的数据都可以被客户端读取。大部分客户端只能读取已经被写入所有的同步副本的消息。因为要满足复制功能的一致性原则。分区首领要知道每一个消息被复制到哪个副本上,在消息没有被写入到所有同步副本之前,是不会发送给消费者的,尝试获取这些消息的请求会得到空相应,而不是错误。

没有被足够多的副本复制完成的消息,会被认为是不安全的。如果首领发生崩溃,另一个副本还没有成为首领,那么这些消息就丢失了。如果允许读取这些消息,就会破坏一致性。因为一个消费者发现这个消息存在,而另一消费者发现这个消息并不存在。

延迟时间通过replica.lag.time.max.ms来配置。

物理存储

kafka的基本存储单元是分区。

Kafka权威指南阅读笔记(第五章)的更多相关文章

  1. Kafka 权威指南阅读笔记(第三章,第四章)

    Kafka 第三章,第四章阅读笔记 Kafka 发送消息有三种方式:不关心结果的,同步方式,异步方式. Kafka 的异常主要有两类:一种是可重试异常,一种是无需重试异常. 生产者的配置: acks ...

  2. Javascript权威指南阅读笔记--第3章类型、值和变量(1)

    之前一直有个想法,好好读完JS权威指南,便于自己对于JS有个较为全面的了解.毕竟本人非计算机专业出生,虽然做着相关行业的工作,但总觉得对于基础的掌握并没有相关专业学者扎实,正好因为辞职待业等原因,还是 ...

  3. Kafka权威指南阅读笔记(第六章)

    Broker配置 Kafka可以同时拥有可靠的主题和非可靠的主题.非可靠的主题允许丢失. 复制系数 主题级别的配置参数是 replication.factor,在Broker级别则可以通过defaul ...

  4. Kafka权威指南阅读笔记(第八章)

    跨集群数据镜像 使用场景: 区域集群和中心集群 这种场景下,每个区域的应用程序只访问相应的区域内的集群.而有些情况下,需要将各个集群的信息汇总到中心集群,就可以用中心集群分析业务数据了. 冗余 一个K ...

  5. 深入理解 C 指针阅读笔记 -- 第五章

    Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...

  6. css权威指南读书笔记-第10章浮动和定位

    这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...

  7. maven权威指南学习笔记(五)—— POM

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  8. maven POM —— maven权威指南学习笔记(五)

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  9. 《图解HTTP》阅读笔记-第五章-web服务器

      第五章.与HTTP协助的web服务器单台虚拟主机实现多个域名可以用单台物理主机运行多台虚拟主机,这些虚拟主机的IP相同,而虚拟主机有可以寄存多个不同主机名和域名的web网站,所以要保证发送HTTP ...

随机推荐

  1. Scala Class etc.

    Classes 一个源文件可包含多个类,每个类默认都是 public 类字段必须初始化,编译后默认是 private,自动生成 public 的 getter/setter :Person 示例 pr ...

  2. append追加的html片段,添加点击事件没有反应,解决!

    对于追加的元素来说,属于未来展现的内容,我们此时不能使用一般点击事情处理,需要用未来事件绑定. 例如:我点击车牌号显示车辆详情,如下绑定. //绑定未来元素 $("body").d ...

  3. Angular template ng-template/container/content

    1. ng-template 形式:<ng-template>...</ng-template> 默认ng-template中的内容会隐藏; 可通过[ngIf]来控制内容显示隐 ...

  4. .Net Core快速创建Windows服务

    1.新建.Net Core控制台程序,添加新建项Windows服务: NuGet引用 System.ServiceProcess.ServiceController,然后修改Progran.cs: c ...

  5. 全网最新最简单的 OpenJDK13 代码编译

    目录 开始咯 1.下载源码 2.安装编译需要的依赖 3.安装 jdk 12 4.检查配置 5.开始编译 6.验证是否成功 回顾 个人博客原文:全网最新最简单的 OpenJDK13 代码编译 最近因写文 ...

  6. FTP协议的主动模式和被动模式的区别

    最近准备做一个<FtpCopy系列教程>,主要讲解Ftp协议主动模式和被动模式的区别.以及FTP服务器的安装部署,然后通过几个常用实例演示,详细讲解如何使用FtpCopy进行数据自动备份. ...

  7. asp.net core过滤器记录响应对象

    百度到的基本上就是读取response.body的流.然后记录完了之后,把流的index重新复位,这样也太麻烦了. 其实asp.net core团队肯定已经考虑到了这种需求,比如记录请求响应日志.给响 ...

  8. node.js操作数据库之MongoDB+mongoose篇

    前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...

  9. Linux 命令个人笔记

    [表示命令]man -f [] 显示一个命令的功能whatis [] 显示一个命令的功能ls -lR | grep '^-' | wc -l 统计一个目录下总共有多少个文件head [-n numbe ...

  10. 浅谈sqlserver的事务锁

    锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 ...