前面我们已经分享过几篇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高清版。

往期推荐
1、如何快速全面掌握Kafka?5000字吐血整理
2、HBase原理 | HBase Compaction介绍与参数调优
3、MapReduce Shuffle 和 Spark Shuffle 结业篇
4、实时数仓 | 你想要的数仓分层设计与技术选型

微信扫一扫,关注我

kafka session.timeout.ms 是指消费一条数据的时间?_干货 | Kafka 内核知识梳理,附思维导图...相关推荐

  1. kafka session.timeout.ms 是指消费一条数据的时间?_阿里工程师分享:浅谈分布式发布订阅消息系统Kafka...

    Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ngi ...

  2. kafka 中参数:session.timeout.ms 和 heartbeat.interval.ms的区别

    文章目录 1.heartbeat.interval.ms 2.heartbeat.interval.ms 与 session.timeout.ms 的对比 3.session.timeout.ms 和 ...

  3. kafka基础-文末思维导图

    文末思维导图 kafka基础-思维导图 Kafka进阶思维导图 Kafka监控调优思维导图 kafka基础 核心术语 Topic 主题 Partition 分区,一个主题多个分区 Record消息 副 ...

  4. 【一图流思维导图】Redis设计与实现 包括( 数据类型-数据结构) 及应用场景(登录次数校验,在线人数统计,分布式session,redis分页,判断重复注册,社交领域共同喜好,排行榜 ,topN)

    参照 Redis详解(一)------ redis的简介与安装 Redis详解(二)------ redis的配置文件介绍 Redis详解(三)------ redis的六大数据类型详细用法 Redi ...

  5. kafka 思维导图

    最近在培训沟通力过程中,一句话说的特别好,有输入就要有输出,最近又学习了一遍kafka 给大家分享一下

  6. java技术路线思维导图_开题报告中的研究方法及技术路线指的啥?

    研究方法,就是你研究这个论文所使用的方法,比如你引用了一个案例,那这就叫做个案法,比如说你调查了一个问卷,这就用了调查法,比如说你去实际勘察,然后询问了别人,这就叫做访谈法,比如说你很多数据都是计算出 ...

  7. kafka核心技术与实战 思维导图

    https://www.zhixi.com/view/7d57c093

  8. kafka Java客户端之 consumer API 消费消息

    背景:我使用docker-compose 搭建的kafka服务 kafka的简单介绍以及docker-compose部署单主机Kafka集群 使用consumer API消费指定Topic里面的消息 ...

  9. Apache Kafka:使用java方式操作消费组和重置分区偏移量(admin api)

    当前版本:kafka_2.12-2.8.0 1. 声明 当前内容主要为本人学习和测试使用java方式操作消费组和重置分区偏移量,主要参考:Apache Kafka官方文档 主要为: 使用java方式实 ...

最新文章

  1. android 虚拟设备的用法
  2. 【Linux】一步一步学Linux——help命令(16)
  3. windows运行linux脚本命令大全,查看和运行 Windows PowerShell 脚本
  4. 使用export/import导出和导入docker容器
  5. C语言scanf函数奇遇记
  6. 基于JAVA+SpringMVC+MYSQL的记账管理系统
  7. 方法用于ThinkPHP3.1快速入门连贯操作
  8. 曹讯 计算机摄像学,计算摄像学: 全光视觉信息的计算采集
  9. DX中材质不能正确显示的问题(要么黑色,要么白色)
  10. 享20个Android游戏源码
  11. 菜刀之中国蚁剑-安装使用及下载地址
  12. 如何把播放器转换成HTML5,Chrome把普通flash播放器转变成HTML5播放器插件:HTML5ify...
  13. 股票经典书籍推荐(豪华版)
  14. 【言简意赅】聊聊DAS、NAS、SAN三种存储方式
  15. matlab 中画箭头
  16. (闪存)存储基础知识
  17. 2023年全国最新二级建造师精选真题及答案13
  18. Android Smart Image View
  19. android webview无法显示H5中的图片
  20. pythonl list 的修改元素

热门文章

  1. Autorelease Pool
  2. SQL Server 通过备份文件初始化复制
  3. 菜鸟学Struts2——Interceptors
  4. Folder and jar
  5. 强大的SqlCacheDependency【转】
  6. ComBox 绑定数据库
  7. Unittest方法 -- 测试套件
  8. 网易编程题------操作序列
  9. 从零开始——基于角色的权限管理01(补充)
  10. DrawerLayout和NavigationView的简单实用