美文网首页
kafka学习笔记

kafka学习笔记

作者: bailongxian | 来源:发表于2020-04-13 09:27 被阅读0次

at least once //重试
at most once //seq id (冥等性)
exactly once // 重试+冥等性

//atomic writes across partitions
1 从transaction coordinator 获取事务ID(事务信息和状态需要持久化到topic中 如果transaction coordinator挂了 用来做事务回复)
2 写message到leader partition中(如果是事务消息 通过消息头部的messageType来判断是事务消息还是普通消息)3
3 更新transaction coordinator中的事务状态(commit or abort)
4 transaction coordinator写Marker(事务的元数据 commit or abort)到leader topic中 更新LSO(Last Stable Offset LSO之后的offset对consumer不可见)
5 如果事务abort了 leader partition 把失败的元数据写到abort transaction的信息文件中
6 consumer消费时 如果message是事务消息 而且在abort transaction中 丢弃这个消息
7 如果在write Marker过程中 某个broker挂了就重写 write-Marker是at least once消息 有重复也无所谓

文件存储
segment file 组成:有两大部分组成 分别为index file 和data file, 此两个文件一一对应,后缀".index"和".log"分别表示segment的索引文件和数据文件。索引文件存储消息的元数据,log文件存储消息的内容。
segment的命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset,数值最大为64位,19位数字字符长度,没有用0填充
以100.indx和100.log的文件为例


c415ed42.png

100.index 100.log
{1, 0} {(message101, 0), (message102, 239)}
{3, 500} {(message103, 500), (message104, 589), (message105, 666), (message106, 700)}
{7, 739} {(message107, 739)}
... ...
{N, postion} message100+N postion

{消息在本文件的系列号, 消息在log的物理偏移地址} {消息的全局系列号 物理偏移地址}
如何查找offset为107的message 根据文件名查找到对应的100的segment file。依次定位到100.index的元数据物理位置和100.log的物理偏移地址

Isr
Kafka结合同步复制和异步复制,使用ISR(与Partition Leader保持同步的Replica列表)的方式在确保数据不丢失和吞吐率之间做了平衡。Producer只需把消息发送到Partition Leader,Leader将消息写入本地Log。Follower则从Leader pull数据。Follower在收到该消息向Leader发送ACK。一旦Leader收到了ISR中所有Replica的ACK,该消息就被认为已经commit了,Leader将增加HW并且向Producer发送ACK。这样如果leader挂了,只要Isr中有一个replica存活,就不会丢数据。

Isr动态更新
Leader会跟踪ISR,如果ISR中一个Follower宕机,或者落后太多,Leader将把它从ISR中移除。这里所描述的“落后太多”指Follower复制的消息落后于Leader后的条数超过预定值(replica.lag.max.messages)或者Follower超过一定时间(replica.lag.time.max.ms)未向Leader发送fetch请求。ISR是AR中的一个子集,由leader维护ISR列表。Kafka的ISR的管理最终都会反馈到Zookeeper节点上。具体位置为:/brokers/topics/[topic]/partitions/[partition]/state。目前有两个地方会对这个Zookeeper的节点进行维护。
Controller来维护:Kafka集群中的其中一个Broker会被选举为Controller,主要负责Partition管理和副本状态管理,也会执行类似于重分配partition之类的管理任务。在符合某些特定条件下,Controller下的LeaderSelector会选举新的leader,ISR和新的leader_epoch及controller_epoch写入Zookeeper的相关节点中。同时发起LeaderAndIsrRequest通知所有的replicas。
Leader来维护:leader有单独的线程定期检测ISR中follower是否脱离ISR, 如果发现ISR变化,则会将新的ISR的信息返回到Zookeeper的相关节点中。

选举机制
kafka中所有topic的leader选举都有controller负责。在所有的broker中选择一个作为controller,controller通过rpc的方式叫leader的变更通知broker。 controller的选举则依赖zookeeper,每个broker启动的时候都尝试去zookeeper上创建一个临时节点,只有创建成功的broker才是controller,其他的broker则watch改节点,防止controller宕机后,执行重新选举新的controller。
controller_epoch:此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1

相关文章

  • sptest

    # Spring Kafka 学习笔记 ## 1 接收消息 接收消息需要提供MessageListenerCont...

  • kafka学习系列

    Kafka学习总结(一)——Kafka简介 Kafka学习总结(二)——Kafka设计原理 Kafka学习总结(三...

  • kafka学习笔记-kafka基础

    参考:极客时间-Kafka核心技术与实战 kafka术语 消息(Record):kafka要处理的主要对象。 主题...

  • spark 学习笔记

    Spark学习笔记 Data Source->Kafka->Spark Streaming->Parquet->S...

  • kafka学习笔记

    1、kafka 简介 kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理百万级QPS(每秒访问次数)的动...

  • Kafka学习笔记

    定义: Kafka 是一款开源的、轻量级的 、分布式、可分区和具有复制备份的 CReplicated)、基于Zoo...

  • Kafka 学习笔记

    Kafka概述 官网 和消息系统类似 Kafka架构 单节点,单broker的部署及使用 配置 启动 创建topi...

  • Kafka 学习笔记

    一、Kafka简介 Kafka (科技术语)。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规...

  • Kafka学习笔记

    Kafka 学习笔记 内容大部分引用自Info - Apache Kafka:下一代分布式消息系统 原文作者Abh...

  • kafka学习笔记

    一、环境变量设置 1. 设置JAVA环境变量 修改/etc/profile配置,添加以下信息 2. 设置kafka...

网友评论

      本文标题:kafka学习笔记

      本文链接:https://www.haomeiwen.com/subject/hniwmhtx.html