数据源管理 | Kafka集群环境搭建,消息存储机制详解 (2)

数据源管理 | Kafka集群环境搭建,消息存储机制详解

Producer发送消息采用的是异步发送的方式,消息发送过程如下:

Producer发送消息之后,经过拦截器,序列化,事务判断;

流程执行后,消息内容放入容器中;

容器在指定时间内如果装满(size),会唤醒Sender线程;

容器如果在指定时间内没有装满,也会执行一次Sender线程唤醒;

唤醒Sender线程之后,把容器数据拉取到topic中;

絮叨一句:读这些中间件的源码,不仅能开阔思维,也会让自己意识到平时写的代码可能真的叫搬砖。

2、存储机制

Kafka中消息是以topic进行标识分类,生产者面向topic生产消息,topic分区(partition)是物理上的存储,基于消息日志文件的方式。

数据源管理 | Kafka集群环境搭建,消息存储机制详解

每个partition对应于一个log文件,发送的消息不断追加到该log文件末端;

log文件中存储的就是producer生产的消息数据,采用分片和索引机制;

partition分为多个segment。每个segment对应两个(.index)和(.log)文件;

index文件类型存储的索引信息;

log文件存储消息的数据;

索引文件中的元数据指向对应数据文件中message的物理偏移地址;

消费者组中的每个消费者,都会实时记录消费的消息offset位置;

当然消息消费出错时,恢复是从上次的记录位置继续消费;

3、事务控制机制

数据源管理 | Kafka集群环境搭建,消息存储机制详解

Kafka支持消息的事务控制

Producer事务

跨分区跨会话的事务原理,引入全局唯一的TransactionID,并将Producer获得的PID和TransactionID绑定。Producer重启后可以通过正在进行的TransactionID获得原来的PID。
Kafka基于TransactionCoordinator组件管理Transaction,Producer通过和TransactionCoordinator交互获得TransactionID对应的任务状态。TransactionCoordinator将事务状态写入Kafka的内部Topic,即使整个服务重启,进行中的事务状态可以得到恢复。

Consumer事务

Consumer消息消费,事务的保证强度很低,无法保证消息被精确消费,因为同一事务的消息可能会出现重启后已经被删除的情况。

四、源代码地址 GitHub·地址 https://github.com/cicadasmile/data-manage-parent GitEE·地址 https://gitee.com/cicadasmile/data-manage-parent

数据源管理 | Kafka集群环境搭建,消息存储机制详解

推荐关联阅读:数据源管理系列

序号 标题
01   数据源管理:主从库动态路由,AOP模式读写分离  
02   数据源管理:基于JDBC模式,适配和管理动态数据源  
03   数据源管理:动态权限校验,表结构和数据迁移流程  
04   数据源管理:关系型分库分表,列式库分布式计算  
05   数据源管理:PostGreSQL环境整合,JSON类型应用  
06   数据源管理:基于DataX组件,同步数据和源码分析  
07   数据源管理:OLAP查询引擎,ClickHouse集群化管理  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdpxp.html