干货 | 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 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...
 
随机推荐
- 【Linux常见命令】alias命令
			
alias命令用于查看和设置指令的别名. 用户可利用alias,自定指令的别名. 若仅输入alias,则可列出目前所有的别名设置. alias的效力仅及于该次登入的操作.若要每次登入是即自动设好别名, ...
 - 【已解决】React项目中按需引入ant-design报错TypeError: injectBabelPlugin is not a function
			
react项目中ant-design按需加载,使用react-app-rewired的时候报错 运行npm start或者yarn start报如下错误: TypeError: injectBabel ...
 - SDN 是什么
			
SDN,Software Defined Network,软件定义(的)网络,这些年方兴未艾,愈演愈烈.但是,笔者以为,SDN 也有愈演愈劣的趋势.而且,现在业界关于什么叫 SDN,也是众说纷坛,莫衷 ...
 - Aurora: 来自 Amazon 的高性能的企业级关系数据库,兼容 MySQL
			
近日,在美国召开的AWS re:Invent云计算大会上,Amazon高级副总裁安迪·杰西发布了企业级关系数据库Aurora.Aurora是一个面向Amazon RDS(关系数据库服务).兼容MySQ ...
 - 从零开始搭建口袋妖怪管理系统(4)-借助webpack4.6工程化项目(上)
			
"手动是不可能手动的了,这辈子都不可能手动的了." 一.目标 上一章我们借助ngRoute,完成了口袋妖怪SPA系统的多模块导航开发,但是现在引用的东西越来越多,项目文件目录开始变 ...
 - 如何设计scalable 的系统 (转载)
			
Design a Scalable System Design a system that scales to millions of users (AWS based) Step 1: Outlin ...
 - Spring源码学习——自定义标签
			
2019独角兽企业重金招聘Python工程师标准>>> 1.自定义标签步骤 创建一个需要扩展的组件 定义xsd文件描述组件内容 创建一个文件,实现BeanDefinitionPars ...
 - 数学--数论--欧拉降幂--P5091  欧拉定理
			
题目背景 出题人也想写有趣的题面,可惜并没有能力. 题目描述 给你三个正整数,a,m,ba,m,ba,m,b,你需要求:ab mod ma^b \bmod mabmodm 输入格式 一行三个整数,a, ...
 - codeforce 1311E. Construct the Binary Tree (构造,就是个模拟)
			
ACM思维题训练集合 You are given two integers n and d. You need to construct a rooted binary tree consisting ...
 - andorid jar/库源码解析之Butterknife
			
目录:andorid jar/库源码解析 Butterknife: 作用: 用于初始化界面控件,控件方法,通过注释进行绑定控件和控件方法 栗子: public class MainActivity e ...
 
			
		