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. 简单python爬虫案例(爬取慕课网全部实战课程信息)

    技术选型 下载器是Requests 解析使用的是正则表达式 效果图: 准备好各个包 # -*- coding: utf-8 -*- import requests #第三方下载器 import re ...

  2. Springboot2.1.x配置Activiti7单独数据源问题

    Springboot2.1.x配置Activiti7单独数据源问题 简介 最近基于最新的Activiti7配置了SpringBoot2. 简单上手使用了一番.发现市面上解决Activiti7的教程很少 ...

  3. redis-分片(转)

    转:https://www.cnblogs.com/houziwty/p/5167075.html 分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包 ...

  4. opencv之霍夫曼变换

    霍夫变换不仅可以找出图片中的直线,也可以找出圆,椭圆,三角形等等,只要你能定义出直线方程,圆形的方程等等. 不得不说,现在网上的各种博客质量真的不行,网上一堆文章,乱TM瞎写,误人子弟.本身自己就没有 ...

  5. System.exit退出程序

    方法源码: /** * Terminates the currently running Java Virtual Machine. The * argument serves as a status ...

  6. .Net Core 商城微服务项目系列(十三):搭建Log4net+ELK+Kafka日志框架

    之前是使用NLog直接将日志发送到了ELK,本篇将会使用Docker搭建ELK和kafka,同时替换NLog为Log4net. 一.搭建kafka 1.拉取镜像 //下载zookeeper docke ...

  7. CPU的物理数、核心数、线程数

    最近了解下CPU的参数,主要是对常见的CPU参数指标:物理数.核心数以及线程数做了下了解.增长了点自己的见识,方便自己回忆和分享,记录下来.参考了网上的一些说明并加以整理,形成该随笔.主要参考链接如下 ...

  8. python使用代理ip

    python使用代理的方法有两种 1. #先创建代理ip对象 proxy_support = urllib.request.ProxyHandler({'https':'117.64.149.137: ...

  9. wordpress发送邮件

    首先在wordpress内添加SMTP协议的插件,我这里用的是WP Mail SMTP 配置如下 配置完成之后测试一下,一定要测试能否发邮件

  10. 在 Vue-cli 创建的项目中引入 Element-UI

    Element-UI 是饿了么前端团队退出了一套基于 vue.js 开发的 UI 组件库,在与 Vue-cli 创建的项目结合时,需要做以下配置: 1. 安装 loader 模块 cnpm insta ...