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来区别

      

      

       

     
  • 相关阅读:
    Bootstrap-table一个表格组件神器(学习二)实战
    JS基础_for循环练习3
    JS基础_for循环练习2
    JS基础_for循环练习1
    JS基础_for循环
    JS基础_while的练习2
    JS基础_while的练习1
    JS基础_while循环
    JS基础_条件分支语句:switch语句
    JS基础_if注意问题
  • 原文地址:https://www.cnblogs.com/huxuhong/p/12505044.html
Copyright © 2011-2022 走看看