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. 品Spring:bean定义上梁山

    认真阅读,收获满满,向智慧又迈进一步... 技术不枯燥,先来点闲聊 先说点好事高兴一下.前段时间看新闻说,我国正式的空间站建设已在进行当中.下半年,长征五号B运载火箭将在海南文昌航天发射场择机将空间站 ...

  2. 部署Tomcat 环境

    部署Tomcat 环境(mysql+tomcat+jdk) 1.下载Tomcat 软件包 2.通过xftp创建root 连接,然后将Tomcat 软件包拖拽到/opt目录下 3.在xshell 上ro ...

  3. 死磕 java同步系列之Phaser源码解析

    问题 (1)Phaser是什么? (2)Phaser具有哪些特性? (3)Phaser相对于CyclicBarrier和CountDownLatch的优势? 简介 Phaser,翻译为阶段,它适用于这 ...

  4. redis-分布式锁-刷新信号量

    为什么需要刷新信号量呢,因为信号量有过期时间: 为什么信号量需要过期时间呢,因为需要利用超时特性,解决分布式锁存在的一些固有缺陷. 而对于类似流式API来说,一般10秒的过期时间是远远不够的.因此我们 ...

  5. springboot WebMvcConfigurerAdapter替代

    过时应用: @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public vo ...

  6. 转载:Docker入门只需看这一篇就够了

    最近项目中需要用到 Docker 打包,于是上网查找资料学习了 Docker 的基本命令,记录一下自己遇到的一些错误. 准备开始自己写,结果看到了阮一峰老师的文章,瞬间就没有写下去的动力了,转载大佬的 ...

  7. 对vue nextTick深入理解-vue性能优化、DOM更新时机、事件循环机制

    一.定义[nextTick.事件循环] nextTick的由来: 由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图 ...

  8. JDK 1.8 之 Map.merge()

    Map 中ConcurrentHashMap是线程安全的,但不是所有操作都是,例如get()之后再put()就不是了,这时使用merge()确保没有更新会丢失. 因为Map.merge()意味着我们可 ...

  9. PHP--网络协议相关知识

    HTTP状态码 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码. HTTP状态码主要有5种,代表5种不同类型的响应: 1xx:信息性状态码,代表接 ...

  10. 大头儿子和小头爸爸的战斗--java字符和字符串

    故事背景 一座普普通通的小屋里,住着大头儿子.小头爸爸和围裙妈妈.在他们普普通通的生活中,总是响起充满欢乐的笑声.最温暖的家又成了他们每个人的爱的源泉. <大头儿子和小头爸爸>是孩子居首( ...