转载自 huxihx,原文链接 Kafka水位(high watermark)与leader epoch的讨论 本文主要讨论0.11版本之前Kafka的副本备份机制的设计问题以及0.11是如何解决的.简单来说,0.11之前副本备份机制主要依赖水位(或水印)的概念,而0.11采用了leader epoch来标识备份进度.后面我们会详细讨论两种机制的差异.不过首先先做一些基本的名词含义解析. 水位或水印(watermark)一词,也可称为高水位(high watermark),通常被用在流式处理领域…
~~~这是一篇有点长的文章,希望不会令你昏昏欲睡~~~ 本文主要讨论0.11版本之前Kafka的副本备份机制的设计问题以及0.11是如何解决的.简单来说,0.11之前副本备份机制主要依赖水位(或水印)的概念,而0.11采用了leader epoch来标识备份进度.后面我们会详细讨论两种机制的差异.不过首先先做一些基本的名词含义解析. 水位或水印(watermark)一词,也可称为高水位(high watermark),通常被用在流式处理领域(比如Apache Flink.Apache Spark…
每个kafka副本对象都持有2个重要的属性:日志末端位移LEO,高水印HW Kafka对leader副本和follower副本的LEO更新机制是不同的,后面我们会详细讨论. Kafka对leader副本和follower副本的hw值更新机制也是不同的. 消费者无法消费分区leader副本上那些位移大于分区hw的消息.分区hw就是leader副本的hw值. 关于LEO 2套follower副本LEO属性:一套LEO值保存在follower副本所在broker的缓存上:另一套LEO值保存在leade…
写在前面的 最近看了Kafka Summit上的这个分享,觉得名字很霸气,标题直接沿用了.这个分享源于社区的KIP-500,大体的意思今后Apache Kafka不再需要ZooKeeper.整个分享大约40几分钟.完整看下来感觉干货很多,这里特意总结出来.如果你把这个分享看做是<三国志>的话,那么姑且就把我的这篇看做是裴松之注吧:) 客户端演进 首先,社区committer给出了Kafka Java客户端移除ZooKeeper依赖的演进过程.下面两张图总结了0.8.x版本和0.11.x版本(是…
Kafka架构 如上图所示,一个典型的kafka集群中包含若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU.memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group,以及一个Zookeeper集群.Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance.producer使用push模式将消息发布到b…
之前写过一篇关于Kafka High watermark的文章,引起的讨论不少:有赞扬之声,但更多的是针对文中的内容被challenge,于是下定决心找个晚上熬夜再看了一遍,昨晚挑灯通读了一遍确实发现不少错误.鉴于此我决定再写一篇博客重新梳理一下最新版本中High watermark(下称HW)的工作原理,也算是纠正之前文章中的错误.这次我不打算说leader epoch,而只是专门讨论HW.log end offset(日志末端位移,下称LEO)的事情.希望我能把整个流程交代清楚.也许这篇文章…
一.相关概念 备份相关的角色 Kafka消息备份分三个角色:分别是Leader副本.Follower副本.ISR集合 Leader副本 负责直接响应client端的读写请求,即和生产者和消费者直接对接,生产者生产一条消息,直接进入Leader副本: Follower副本 作为特殊消费者,被动的接收leader副本中的数据.注意:follower副本不能响应client端的读写请求: ISR集合 与leader保持同步的follower,属于ISR副本集合(同步的备份集合),反过来说,在某个时刻,…
Kafka中的事务是怎么实现的? Kafka中的事务可以使应用程序将消费消息.生产消息.提交消费位移当作原子操作来处理,同时成功或失败,即使该生产或消费会跨多个分区. 生产者必须提供唯一的transactionalId,启动后请求事务协调器获取一个PID,transactionalId与PID一一对应. 每次发送数据给<Topic, Partition>前,需要先向事务协调器发送AddPartitionsToTxnRequest,事务协调器会将该<Transaction, Topic,…
上一篇文章讲了LogSegment和Log的初始化,这篇来讲讲Log的主要操作有哪些. 一般来说Log 的常见操作分为 4 大部分. 高水位管理操作 日志段管理 关键位移值管理 读写操作 其中关键位移值管理主要包含Log Start Offset 和 LEO等. 高水位HighWatermark 高水位HighWatermark初始化 高水位是通过LogOffsetMetadata类来定义的: @volatile private var highWatermarkMetadata: LogOff…
1.Kafka 中的 ISR(InSyncRepli).OSR(OutSyncRepli).AR(AllRepli)代表什么? 1.AR = ISR+OSR ISR: kafka 使用多副本来保证消息不丢失,多副本就涉及到kafka的复制机制,在一个超大规模的集群中,时不时地这个点磁盘坏了,那个点cpu负载高了,出现各种各样的问题,多个副本之间的复制,如果想完全自动化容错,就要做一些考量和取舍了.我们举个例子说明下运维中面对的复杂性,我们都知道 kafka 有个 ISR集合,我先说明下这个概念:…