干货 | Kafka 内核知识梳理,附思维导图
前面我们已经分享过几篇Kafka的文章,最近简单梳理了下Kafka内核相关的知识,涵盖了Kafka架构总结,副本机制,控制器,高水位机制,日志或消息存储,消息发送与消费机制等方面知识。文末含对应的Kafka内核思维导图,供参考。
1、架构总结
2)有几个Kafka术语肯定是不陌生的:broker,topic,partition,segment,生产者producer,消费者consumer;
2、消息发送机制
1)序列化器:序列化消息对象转成字节数组,然后通过网络传输。2)分区器:计算消息发往的具体分区;如果显示指定了partition,便不会走分区器。
3)消息缓冲池:客户端的消息缓冲池,默认大小32M,见参数buffer.memory。
4)批量发送:缓冲池中消息会按batch分批次发送,默认批次大小16KB,见参数batch.size。
3、副本机制
1)分区副本默认1,见参数default.replication.factor。
2)副本作用(并不提供读写分离)
- 实现冗余,提高消息可靠性;
- 实现高可用,参与leader选举,在leader不可用时提高可用性。
3)leader副本选举
- 由控制器负责;
- 选举机制或策略:首先要弄明白AR,ISR的概念,基本策略是从AR中找第一个存活的副本,且该副本在ISR中。
参数unclean.leader.election.enable,用于控制是否允许非同步副本参与leader 选举,默认false。如果开启,则当ISR为空时就会从这些副本中选举新的leader,这个过程就称为Unclean leader选举。
4、控制器概述
1)作用:协调与管理整个集群,5个主要职责:
- 主题增删改
- 分区重分配
- leader选举
- 元数据管理
- broker成员管理,宕机或加入
2)控制器选举:基于zookeeper实现,利用了zookeeper的znode模型与监听机制。
3)控制器故障转移
- 存在单点故障,但是每个broker节点都可以成为controller;
- 故障转移即failover也是基于zookeeper实现的,znode模型与监听机制,/controller节点。
5、高水位机制
1)概念
HW即高水位,是Kafka副本对象的重要属性,分区的高水位由leader副本的高水位表示,含义是被follower副本同步之后的位置。
2)作用
- 定义消息可见性,只有分区高水位以下的消息才能被消费;
- 帮助kafka完成副本同步,kafka是基于高水位实现的异步的副本同步机制。
3)LEO的概念
含义是日志末端位移(Log End Offset),下一条消息写入的位移。
6、消息消费机制
1)拉取机制
Kafka生产端是推的机制即Push,消费端是拉的机制即Pull。
2)Pull的优缺点
- 优点是消费端可以自己控制消息的读取速度和数量;
- 缺点是不知道服务端有没有数据,所以要一直pull或隔一定时间pull,可能要pull多次并等待。
3)消息投递语义:
Kafka默认保证at-least-once delivery,容许用户实现at-most-once语义,exactly-once的实现取决于目的存储系统。
4)分区分配策略
- RangeAssignor:按照分区范围分配,当前默认策略;
- RoundRobinAssignor:轮询的方式分配;
- StickyAssignor:Kafka 0.11版本引入,根据更多指标比如负载,尽可能均匀。
7、日志存储机制
1)原理
- 分段存储,这里的段segment指的是日志段文件,Kafka中的日志含义即是消息或数据,日志回滚受log.segment.bytes控制,默认1G;
- 索引文件,一个稀疏格式的索引,受参数log.index.interval.bytes控制,默认4KB。即不是每条数据都会写索引,默认每写4KB数据才会写一条索引。
$ ll
-rw-r--r-- 1 kafka kafka 1002496 Apr 25 17:08 00000000000051402174.index
-rw-r--r-- 1 kafka kafka 1073741338 Apr 25 17:08 00000000000051402174.log
-rw-r--r-- 1 kafka kafka 10485760 Apr 26 15:03 00000000000051638285.index
-rw-r--r-- 1 kafka kafka 219984088 Apr 26 15:04 00000000000051638285.log
- 基于空间:log.retention.bytes,默认未开启;
- 基于时间:log.retention.hours(mintues/ms),默认7天;
- 基于起始位移:Kafka 0.11.0.0版本引入,解决流处理场景中已处理的中间消息删除问题。
目前基于时间的日志留存策略最常使用。
为了更好的精进学习Kafka,笔者参考本文制作了的一张思维导图,分享:

关注本公众号,后台回复 kafka2020 即可下载Kafka内核高清PDF文档。
往期推荐
干货 | Kafka 内核知识梳理,附思维导图的更多相关文章
- Vue基础开发入门之简单语法知识梳理(思维导图详解)
基于个人写的以下关于Vue框架基础学习的三篇随笔,在此基础上,做一个阶段性的知识总结,以此来检验自己对Vue这一段时间学习的成果,内容不多,但很值得一看.(思维导图详解)
- VIM基础知识整理(附思维导图)
这是当时初学VIM后做的一个思维导图,图片稍大,所以从freemind导出了html文本po在下面:图片在最下方,放大可清晰浏览. VIM 普通模式 普通编辑命令 功能:浏览,普通编辑 x:删除光标所 ...
- 32、最长有效括号 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(32)最长有效括号 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "滑动窗 ...
- 31、下一个排列 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(31)下一个排列 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "双指针法 ...
- 33、搜索旋转排序数组 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(33)搜索旋转排序数组 一 题目描述! 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 & ...
- 34、在排序数组中查找元素的第一个和最后一个位置 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(34)在排序数组中查找元素的第一个和最后一个位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: / ...
- 35、搜索插入位置 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(35)搜索插入位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "无视要 ...
- 36、有效的数独 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(36)有效的数独 前言 1)码农三少 ,一个致力于 编写极简.但齐全题解(算法) 的博主. 2)文末附赠 价值上百美刀 资料. 一 ...
- 精心整理「服务器Linux C/C++」 成长路程(附思维导图)
前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...
随机推荐
- Neditor 2.1.16 发布,修复缩放图片问题
开发四年只会写业务代码,分布式高并发都不会还做程序员? BUG 修复 修复缩放图片时,鼠标mouseUp后图片还是在缩放 by @ShinyHwong Demo: https://demo.ne ...
- Git 提交项目命令
git add . //添加⽂件到待提交区 git commit -m "注释" //创建⼀个提交 git push origin //将修改内容提交
- [bzoj2427]P2515 [HAOI2010]软件安装(树上背包)
tarjan+树上背包 题目描述 现在我们的手头有 \(N\) 个软件,对于一个软件 \(i\),它要占用 \(W_i\) 的磁盘空间,它的价值为 \(V_i\).我们希望从中选择一些软件安装到一台磁 ...
- Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码
目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...
- Python爬虫(二)爬百度贴吧楼主发言
爬取电影吧一个帖子里的所有楼主发言: # python2 # -*- coding: utf-8 -*- import urllib2 import string import re class Ba ...
- wmic 内网使用
先决条件: 1.远程服务器启动Windows Management Instrumentation服务,开放TCP135端口,防火墙放开对此端口的流量(默认放开): 2.远程服务器的本地安全策略的“网 ...
- hdu1074之状压dp
#include <iostream> #include <cstdio> #include <cstring> using namespace std; cons ...
- Vuel路由跳转动画
1.App.vue中添加 <transition :name="animate"> <router-view/> </transition> e ...
- java读源码 之 list源码分析(LinkedList)
文章目录 LinkedList: 继承关系分析: 字段分析: 构造函数分析: 方法分析: LinkedList: 继承关系分析: public class LinkedList<E> ex ...
- Angular 从入坑到挖坑 - Router 路由使用入门指北
一.Overview Angular 入坑记录的笔记第五篇,因为一直在加班的缘故拖了有一个多月,主要是介绍在 Angular 中如何配置路由,完成重定向以及参数传递.至于路由守卫.路由懒加载等&quo ...
