zoukankan      html  css  js  c++  java
  • kafka producer 概要(看源码前,最好能掌握)

                                                                kafakproducer概要(看源码前,最好能理解)

    摘要

         kafak 被设计用来作为一个统一的平台来处理庞大的数据的实时工具,在设计上有诸多变态的要求

        它必须具有高吞吐量才能支持大量事件流,例如实时日志聚合。                                             

        它需要优雅地处理大量数据积压,以支持从脱机系统定期加载数据。

        系统将必须处理低延迟传递,以处理更多传统的消息传递用例。     

                 支持进行分区,分布式,实时处理,强大的容错能力。   

        下文主要对kafka client 客户端源码进行分析           

            

       kafka客户端

                 上图为kafka客户端发送消息的简单架构图,在kafka客户端(以下简称客户端)中存在2个线程

        ①:kafkaProducer 主线程负责数据收集并存入RecordBatch

        ②:Sender 负责从RecordBatch中获取数据,并组装报文,发送请求以及解析响应报文

     通讯协议和消息格式

       户端说白了就是负责组装报文用来通讯的,那么理解kafka的通讯协议(报文)和消息格式对看源码是非常有必要的,可以解决你心目中的各种why,why,why

        通讯协议

         

      消息格式

     

          至于这些到底干啥用的,我就不解释那么多,给大家推荐2篇文章,解释的相当到位

         ①:通讯协议(https://www.cnblogs.com/wxd0108/p/6519620.html

     ②:消息格式(https://blog.csdn.net/u013256816/article/details/80300225

      给大家浓缩一下

     通讯过程(重要)

      ①:通讯协议定义了双方交换数据的基本结构。通讯的过程可以简单地表示为:客户端打开与服务器端的Socket,然后往Socket写入一个4个字节的数字表示这次发送的Request有多少字节

         ②:然后继续往Socket中写入对应字节数的数据。服务器端先读出一个4个字节的整数,从而获取这次Request的大小,然后读取对应字节数的数据从而得到Request的具体内容。服务器端处理了请求后,也用同样的方式来发送响应。

      区分不同请求(重要)

      ①:客户端不同的请求类型(这个很好理解,简单发送数据和从服务器拿数据,这2个请求肯定不同的,返回的内容也是不同的),kafka主要通过通过通讯协议的apikeys来区别

      

      

       

     
  • 相关阅读:
    [CF724G]Xor-matic Number of the Graph
    [SOJ #537]不包含 [CF102129I]Incomparable Pairs(2019-8-6考试)
    [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
    [洛谷P4052][JSOI2007]文本生成器
    [洛谷P3966][TJOI2013]单词
    [洛谷P5158]【模板】多项式快速插值
    [洛谷P3227][HNOI2013]切糕
    【bzoj】3477: [Usaco2014 Mar]Sabotage 01分数规划
    【SPOJ
    【以前的空间】系列
  • 原文地址:https://www.cnblogs.com/huxuhong/p/12505044.html
Copyright © 2011-2022 走看看