前面我们已经分享过几篇Kafka的文章,最近简单梳理了下Kafka内核相关的知识,涵盖了Kafka架构总结,副本机制,控制器,高水位机制,日志或消息存储,消息发送与消费机制等方面知识。文末含对应的Kafka内核思维导图,供参考

1、架构总结

1)Kafka实际上也是一个主从架构,有一个Controller角色即控制器,协调管理整个集群;
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中。
 
4)Unclean leader选举

参数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 
 
2)日志留存策略Kafka 会定期检查是否要删除旧消息,见参数 log.retention.check.interval.ms,默认5分钟。当前有三种日志留存策略:

  • 基于空间:log.retention.bytes,默认未开启;
  • 基于时间:log.retention.hours(mintues/ms),默认7天;
  • 基于起始位移:Kafka 0.11.0.0版本引入,解决流处理场景中已处理的中间消息删除问题。

目前基于时间的日志留存策略最常使用。


为了更好的精进学习Kafka,笔者参考本文制作了的一张思维导图,分享:

关注本公众号,后台回复 kafka2020 即可下载Kafka内核高清PDF文档。

往期推荐

 

干货 | Kafka 内核知识梳理,附思维导图的更多相关文章

  1. Vue基础开发入门之简单语法知识梳理(思维导图详解)

    基于个人写的以下关于Vue框架基础学习的三篇随笔,在此基础上,做一个阶段性的知识总结,以此来检验自己对Vue这一段时间学习的成果,内容不多,但很值得一看.(思维导图详解)

  2. VIM基础知识整理(附思维导图)

    这是当时初学VIM后做的一个思维导图,图片稍大,所以从freemind导出了html文本po在下面:图片在最下方,放大可清晰浏览. VIM 普通模式 普通编辑命令 功能:浏览,普通编辑 x:删除光标所 ...

  3. 32、最长有效括号 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(32)最长有效括号 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "滑动窗 ...

  4. 31、下一个排列 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(31)下一个排列 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "双指针法 ...

  5. 33、搜索旋转排序数组 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(33)搜索旋转排序数组 一 题目描述! 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 & ...

  6. 34、在排序数组中查找元素的第一个和最后一个位置 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(34)在排序数组中查找元素的第一个和最后一个位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: / ...

  7. 35、搜索插入位置 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(35)搜索插入位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "无视要 ...

  8. 36、有效的数独 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(36)有效的数独 前言 1)码农三少 ,一个致力于 编写极简.但齐全题解(算法) 的博主. 2)文末附赠 价值上百美刀 资料. 一 ...

  9. 精心整理「服务器Linux C/C++」 成长路程(附思维导图)

    前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...

随机推荐

  1. 模块sys,os

    Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的. 在Pyt ...

  2. 为什么LIKELY和UNLIKELY要用两个叹号

    LIKELY和UNLIKELY的一般定义如下: #define LIKELY(x) (__builtin_expect(!!(x),1))#define UNLIKELY(x) (__builtin_ ...

  3. Firefox 66 发布,阻止网站自动播放声音

    Firefox 66 发布了,此版本在桌面版中带来的新特性包括: Firefox 现在阻止网站自动播放声音,如果需要可以单独调整 改进的搜索体验: 当打开许多选项卡时,可以更快地查找特定网页:现在可以 ...

  4. Vue项目开发流程(自用)

    一.配置开发环境 1.1 安装Node.js npm集成在Node中,检查是否安装完成:node -v 1.2 安装cnpm(淘宝镜像) npm install -g cnpm,检查安装是否完成:cn ...

  5. 剑指offer---05---用栈实现队列

    题意 给了两个栈去实现队列   分析 两个栈如下情况       1       2 4    3 这个时候就不能够把4插入到第二个弹出栈了否则弹出顺序出错. 所以这个时候就应该等第二个栈空了的时候再 ...

  6. Java pdf转高清图片

    为什么80%的码农都做不了架构师?>>>   package com.hyb.kai.web.controller; import java.awt.image.BufferedIm ...

  7. codeforce 227D Naughty Stone Piles (贪心+递归+递推)

    Description There are n piles of stones of sizes a1, a2, -, an lying on the table in front of you. D ...

  8. swipe 滑动操作

    1.swipe() 滑动用法 swipe(self, start_x, start_y, end_x, end_y, duration=None) :Args: - start_x - 开始滑动的x坐 ...

  9. App 自动化环境搭建

    1.安装 Appium-desktop 工具 下载地址:https://github.com/appium/appium-desktop/releases 2.安装 Android 环境 安装 JDK ...

  10. Programming Languages_05 FWAE

    FWAE : Concrete syntax <FWAE> ::= <num> | {+ <FWAE> <FWAE>} | {- <FWAE> ...