前面我们已经分享过几篇Kafka的文章,最近简单梳理了下Kafka内核相关的知识,涵盖了Kafka架构总结,副本机制,控制器,高水位机制,日志或消息存储,消息发送与消费机制等方面知识。文末含对应的Kafka内核思维导图,供参考。
1)Kafka实际上也是一个主从架构,有一个Controller角色即控制器,协调管理整个集群;
2)有几个Kafka术语肯定是不陌生的:broker,topic,partition,segment,生产者producer,消费者consumer;
1)序列化器:序列化消息对象转成字节数组,然后通过网络传输。
2)分区器:计算消息发往的具体分区;如果显示指定了partition,便不会走分区器。
3)消息缓冲池:客户端的消息缓冲池,默认大小32M,见参数buffer.memory。
4)批量发送:缓冲池中消息会按batch分批次发送,默认批次大小16KB,见参数batch.size。
1)分区副本默认1,见参数default.replication.factor。
2)副本作用(并不提供读写分离)
3)leader副本选举
4)Unclean leader选举
参数unclean.leader.election.enable,用于控制是否允许非同步副本参与leader 选举,默认false。如果开启,则当ISR为空时就会从这些副本中选举新的leader,这个过程就称为Unclean leader选举。
1)作用:协调与管理整个集群,5个主要职责:
2)控制器选举:基于zookeeper实现,利用了zookeeper的znode模型与监听机制。
3)控制器故障转移
1)概念
HW即高水位,是Kafka副本对象的重要属性,分区的高水位由leader副本的高水位表示,含义是被follower副本同步之后的位置。
2)作用
3)LEO的概念
含义是日志末端位移(Log End Offset),下一条消息写入的位移。
1)拉取机制
Kafka生产端是推的机制即Push,消费端是拉的机制即Pull。
2)Pull的优缺点
3)消息投递语义:
Kafka默认保证at-least-once delivery,容许用户实现at-most-once语义,exactly-once的实现取决于目的存储系统。
4)分区分配策略
1)原理
$ 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分钟。当前有三种日志留存策略:
目前基于时间的日志留存策略最常使用。
为了更好的精进学习Kafka,笔者参考本文制作了的一张思维导图,分享:
关注本公众号,后台回复 kafka2020 即可下载Kafka内核高清PDF文档。