Kafka权威指南阅读笔记(第五章)
Kafka Broker
- kafka 第一个启动的Broker在ZooKeeper中创建一个临时节点/controller,让自己成为控制器。其他Broker启动后在控制器节点上创建Watch对象,便接收节点变更通知。
- Kafka利用ZooKeeper来选举控制器,并在节点加入或者退出集群时通知控制器。控制器负责在节点加入或者退出集群时选举分区首领。控制器使用Epoch来防止“脑裂”。
- Kafka 使用主题来组织数据,每个主题被分为若干个分区,每个分区有多个副本。每个Broker上面可以保存成百上千个不同主题不同分区的副本。
- 副本有两种类型: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权威指南阅读笔记(第五章)的更多相关文章
- Kafka 权威指南阅读笔记(第三章,第四章)
Kafka 第三章,第四章阅读笔记 Kafka 发送消息有三种方式:不关心结果的,同步方式,异步方式. Kafka 的异常主要有两类:一种是可重试异常,一种是无需重试异常. 生产者的配置: acks ...
- Javascript权威指南阅读笔记--第3章类型、值和变量(1)
之前一直有个想法,好好读完JS权威指南,便于自己对于JS有个较为全面的了解.毕竟本人非计算机专业出生,虽然做着相关行业的工作,但总觉得对于基础的掌握并没有相关专业学者扎实,正好因为辞职待业等原因,还是 ...
- Kafka权威指南阅读笔记(第六章)
Broker配置 Kafka可以同时拥有可靠的主题和非可靠的主题.非可靠的主题允许丢失. 复制系数 主题级别的配置参数是 replication.factor,在Broker级别则可以通过defaul ...
- Kafka权威指南阅读笔记(第八章)
跨集群数据镜像 使用场景: 区域集群和中心集群 这种场景下,每个区域的应用程序只访问相应的区域内的集群.而有些情况下,需要将各个集群的信息汇总到中心集群,就可以用中心集群分析业务数据了. 冗余 一个K ...
- 深入理解 C 指针阅读笔记 -- 第五章
Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...
- css权威指南读书笔记-第10章浮动和定位
这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...
- maven权威指南学习笔记(五)—— POM
1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...
- maven POM —— maven权威指南学习笔记(五)
1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...
- 《图解HTTP》阅读笔记-第五章-web服务器
第五章.与HTTP协助的web服务器单台虚拟主机实现多个域名可以用单台物理主机运行多台虚拟主机,这些虚拟主机的IP相同,而虚拟主机有可以寄存多个不同主机名和域名的web网站,所以要保证发送HTTP ...
随机推荐
- mysql replace into使用
使用mysql插入数据时,我们通常使用的是insert into来处理,replace into有时可以替代insert into功能,但replace into也有自己的用法 准备一张测试表: CR ...
- Linux 文件复制命令cp
文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) cp [option] source1 source2 source3 ... ...
- python爬取哦漫画
import requests from lxml import etree from bs4 import BeautifulSoup import os from selenium import ...
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
- 虚拟机中设置 CentOS 静态 IP
作为开发人员在工作和学习中通过虚拟机使用 Linux 的情况肯定会非常多,但是 Linux 自带的终端使用体验较差,所以绝大多数使用者都会在宿主机上使用第三方 SSH工具(例如 Xshell)进行连接 ...
- [LeetCode] 1108. Defanging an IP Address
Description Given a valid (IPv4) IP address, return a defanged version of that IP address. A defange ...
- golang面试题--string操作
题目: 请实现一个算法,确定一个字符串的所有字符[是否全都不同].这里我们要求[不允许使用额外的存储结构].给定一个string,请返回一个bool值,true代表所有字符全都不同,false代表存在 ...
- 单元测试实践(SpringCloud+Junit5+Mockito+DataMocker)
网上看过一句话,单元测试就像早睡早起,每个人都说好,但是很少有人做到.从这么多年的项目经历亲身证明,是真的. 这次借着项目内实施单元测试的机会,记录实施的过程和一些总结经验. 项目情况 首先是背景,项 ...
- 基于Prometheus和Grafana的监控平台 - 环境搭建
相关概念 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics. Logging - 用于记录离散的事件.例如,应用程序的调试信息或错误信息.它是我们诊断问题的依据. ...
- 可能是把 ZooKeeper 概念讲的最清楚的一篇文章
转载自:https://github.com/Snailclimb/JavaGuide/blob/master/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6/ZooKeep ...