您的位置:首页 > 其它

1. kafka的核心操作组件 —— 延迟操作组件

2018-07-07 17:18 477 查看
  1. 延迟操作:kafka将一些需要等待满足一定条件之后才触发的操作成为延迟操作,并将这些操作定义为一个抽象类DelayedOperation。
  2. kafka的延迟组件有DelayedProduce、DelayedFetch、DelayedHeartbeat、DelayedJoin、DelayedCreateTopics,这些都继承于DelayedOperation抽象类,分别用来协助相应的组件对不同的请求完成延迟处理。
  3. DelayedOperation抽象类下的方法:
    1)tryComplete()。一个抽象方法,由子类负责实现,检测执行条件是否满足,如果满足,子类执行forceComplete()方法完成操作。
    2) forceComplete()。该方法用于检测任务是否执行,若未执行,则会调用onComplete()方法。此方法采用CAS原子操作可以保证在并发操作时只有第一个调用该方法的线程能顺利调用onComplete()。
    3) onComplete()。抽象方法,由子类负责实现,是实际的业务逻辑。
    4) safeTryComplete()。供外部方法调用,外部调用此方法时,此方法会调用onComplete()。
    5) onExpriation()。抽象方法,由子类负责实现当延迟操作已达失效时间时的相应逻辑处理。
  4. 延迟操作的类型:
    1) DelayedProduce。DelayedProduce是协助ReplicaManager副本管理器完成相应操作的。ReplicaManager副本管理器的功能是负责将生产者发送的消息写入Leader副本、管理Follower副本与Leader副本之间数据同步以及主副本角色互换。DelayedProduce的作用就是协助副本管理器在满足所有副本同步完消息后再向客户端做出响应。所以DelayedProduce的tryComplete()方法就是去检测所有分区是否已经完生产者发送的数据,onComplete()方法就是向客户端做出响应。
    2) DelayedFetch。这个组件是在FetchRequest获取数据请求时进行的延迟操作。在kafka中只有消费者和Follower副本会发起FetchRequest请求。这个延迟操作的目的是为了让每次拉取消息时,可以获取到指定大小的数据。
    3) DelayedJoin。这个组件是协助组协调器在消费组准备平衡操作时进行相应的处理,之所以需要DelayedJoin,是为了让组协调器等待当前消费组下所有的消费者都请求加入消费组。
    4) DelayedHeartbeat。心跳延迟操作组件。
    5) DelayedCreateTopics。DelayedCreateTopics延迟操作等待该主题的所有分区副本分配到leader后调用回调函数返回给客户端。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kafka 延迟 操作组件