Kafka科普系列 | 轻松理解Kafka中的延时操作

  • 时间:
  • 浏览:1

私信关键词 【架构】免费获取!

一同还要更多java相关资料以及面试心得和视频资料的,关注+转发+私信我“架构”免费获取Java工程化、高性能及分布式、高性能、高架构、性能调优、Spring、MyBatis、Netty源码分析等多个知识点高级进阶干货的直播免费学习权限及相关视频资料,还有spring和虚拟机等书籍扫描版

如下图所示,三个 多follower副本都因此拉取到了leader副本的最新位置,此时又向leader副本发送拉取请求,而leader副本并如此 新的消息写入,如此 此时leader副本该怎么才能 才能 除理呢?都还要直接返回空的拉取结果给follower副本,不过在leader副本总爱如此 新消息写入的具体情况下,follower副本会总爱发送拉取请求,因此总收到空的拉取结果,如此 徒耗资源,显然不太合理。

对于延时生产(消息)而言,因此在使用生产者客户端发送消息的事先将acks参数设置为-1,如此 就原应还要守候ISR集合中的所有副本都确认收到消息事先还能否正确地收到响应的结果,因此捕获超时异常。

假设某个分区有三个副本:leader、follower1和follower2,它们完会 分区的ISR集合中。为了僵化 说明,这里大伙 不考虑ISR集合伸缩的具体情况。Kafka在收到客户端的生产请求后,将消息3和消息4写入leader副本的本地日志文件,如上图所示。

本文起源于事先去面试的一道面试题,面试题大致上是如此 的:消费者去Kafka里拉去消息,因此目前Kafka中又如此 新的消息都还要提供,如此 Kafka会怎么才能 才能 除理?

就延时生产操作而言,它的内部管理事件是所要写入消息的某个分区的HW(高水位)指在增长。也后来说,随着follower副本不断地与leader副本进行消息同步,进而促进HW进一步增长,HW每增长一次完会 检测不是还能否完成此次延时生产操作,因此都还要就执行以此返回响应结果给客户端;因此在超时时间内始终无法完成,则强制执行。

延迟操作不后来拉撤销息时的特有操作,在Kafka含有多种延时操作,比如延时数据删除、延时生产等。

人过留名,雁过留声,路过记得点个赞。

如此 这里守候消息3和消息4写入follower1副本和follower2副本,并返回相应的响应结果给客户端的动作是由谁来执行的呢?在将消息写入leader副本的本地日志文件事先,Kafka会创建三个 多延时的生产操作(DelayedProduce),用来除理消息正常写入所有副本或超时的具体情况,以返回相应的响应结果给客户端。

因此客户端设置了acks为-1,如此 还要等到follower1和follower2三个 多副本都收到消息3和消息4后还能否告知客户端正确地接收了所发送的消息。因此在一定的时间内,follower1副本或follower2副本没还能否完整版拉取到消息3和消息4,如此 就还要返回超时异常给客户端。生产请求的超时时间由参数request.timeout.ms配置,默认值为300000,即300s。

这里就涉及到了Kafka延迟操作的概念。Kafka在除理拉取请求时,会先读取一次日志文件,因此整理还能否足够多(fetchMinBytes,由参数fetch.min.bytes配置,默认值为1)的消息,如此 就会创建三个 多延时拉取操作(DelayedFetch)以守候拉取到足够数量的消息。当延时拉取操作执行时,会再读取一次日志文件,因此将拉取结果返回给follower副本。

回顾一下文中开头的延时拉取操作,它也同样如此 ,也是由超时触发或内部管理事件触发而被执行的。超时触发很好理解,后来等到超时时间事先触发第二次读取日志文件的操作。内部管理事件触发就稍僵化 了许多,因此拉取请求不单单由follower副本发起,也都还要由消费者客户端发起,某种生活具体情况所对应的内部管理事件也是不同的。因此是follower副本的延时拉取,它的内部管理事件后来消息追加到了leader副本的本地日志文件中;因此是消费者客户端的延时拉取,它的内部管理事件都还要简单地理解为HW的增长。

延时操作还要延时返回响应的结果,首先它还要有三个 多超时时间(delayMs),因此在许多超时时间内如此 完成既定的任务,如此 就还要强制完成以返回响应结果给客户端。其次,延时操作不同于定时操作,定时操作是指在特定时间事先执行的操作,而延时操作都还要在所设定的超时时间事先完成,后来延时操作还能否支持内部管理事件的触发。