本文源码基于kafka 0.10.2版本
每当controller发生状态变更时,都会通过调用sendRequestsToBrokers
方法发送leaderAndIsrRequest
请求,本文主要介绍kafka服务端处理该请求的逻辑和过程。
本文源码基于kafka 0.10.2版本
每当controller发生状态变更时,都会通过调用sendRequestsToBrokers
方法发送leaderAndIsrRequest
请求,本文主要介绍kafka服务端处理该请求的逻辑和过程。
kafka集群出现宕机报警,自动替换新broker一直无法成功。
有一个线上服务多个集群出现FGC,降低集群压力之后并没有改善。
CompletableFuture
是Java8 中新增的用来进行函数式异步编程的工具类。
最近学习源码的过程中看到有很多 CompletableFuture
的使用,感觉自己对这个类中的各个方法的使用场景和方法不是很熟悉,遂参考了下面几篇博客进行学习(本文大部分内容也都来自下面几篇博客):
Java8新的异步编程方式 CompletableFuture(一)
Java8新的异步编程方式 CompletableFuture(二)
Java8新的异步编程方式 CompletableFuture(三)
上面的博客介绍的比较详细,为了自己查阅回看的方便,这里对这些方法进行一下总结(这里只总结不举例,具体使用需要看上面的博客)。
对于已经消费但是没有确认的消息,Pulsar 可以通过配置 BacklogQuota 决定保留大小及丢弃策略。
具体参见官方文档:Message retention and expiry
当 Backlog 大小未达到限额时,不需要处理,当 Backlog 大小超限时,根据丢弃策略进行处理。
BacklogQuota 的丢弃策略一共有三种:
producer_request_hold
:① 断开所有的 Producer ② 在新建 Producer 时进行检查,如果超出 BacklogQuota,则拒绝新建请求并等待超时(异步返回结果调用get()
时才抛出异常)producer_exception
:① 断开所有的 Producer ② 在新建 Producer 时进行检查,如果超出 BacklogQuota,则拒绝新建请求并抛出异常consumer_backlog_eviction
:丢弃最早的 Backlog阅读了《深入理解Java虚拟机》的部分章节,并做了一些简单的笔记,不是很详细,但是可以方便自己查阅。
对于已经消费确认的消息,Pulsar 可以通过配置 Retention 策略决定保留的时间及大小。
具体参见官方文档:Message retention and expiry
Pulsar 源码中有三个部分与 Retention 相关。