zoukankan      html  css  js  c++  java
  • Kafka生产者-内部原理

    整体架构

    流程分析

    生产者客户端由2个线程构成,分别为主线程和发送线程,主线程中KafkaProducer创建消息,经过拦截器序列化器分区器之后,缓存到消息累加器,然后发送线程从消息累加器中获取消息并将其发送到Kafka中

    累加器主要的作用是缓存消息,让发送线程可以批量发送,减少网络传输资源消耗提升性能,缓存大小可以通过buffer.memory配置,默认值为32MB,如果生产者发送消息的速度超过发送到服务器的速度,则send()方法要么被阻塞,要么抛出异常,取决于参数max.block.ms,默认值为60000ms

    主线程发送的消息被追加到消息累加器的一个双端队列中,消息累加器内部为每个分区都维护了一个双端队列,队列中是ProducerBatch,包含多个ProducerRecord

    消息累加器中还有一个BufferPool实现ByteBuffer的复用

    发送线程从消息累加器获取缓存的消息之后,将原来的<TopicPartition, Deque>形式转变成<Node,List>的形式,Node节点表示Kafka集群的broker节点,然后进一步封装成<Node,Request>形式,将请求发往各个Node

    请求发送之前会保存到InFlightRequests中,具体形式为Map<NodeId,Deque>,主要作用是缓存已经发送出去但还没收到响应的请求,除此之外,还可以通过配置参数限制每个连接最多可以缓存的请求数,配置参数为max.in.flight.requests.per.connection,第三个作用是可以获得leastLoadedNode,即所有Node中负载最小的一个(未确认的请求越少则负载越少)

  • 相关阅读:
    2019 湖湘杯 Reverse WP
    2017第二届广东省强网杯线上赛--Nonstandard
    2019 上海市大学生网络安全大赛 RE部分WP
    2019 360杯 re wp--Here are some big nums
    MATLAB图像的代数运算
    编辑和剪绳子-头条2019笔试题
    奖品分配-头条2019笔试题
    TrajPreModel
    multiheadattention-torch
    腾讯笔试题-邻值查找
  • 原文地址:https://www.cnblogs.com/jordan95225/p/13387848.html
Copyright © 2011-2022 走看看