zoukankan      html  css  js  c++  java
  • kafka 数据存储和发送

    摘要

      前面我们已经解释获取和更新metadata以及重要性,那么如何给topic 发送数据?

      kafkaclient和broker通信,有很多种情况,核心的broker提供的接口有6个

                 元数据接口(Metadata API),生产消息接口(Produce API),获取消息接口(Fetch API)

        偏移量接口(Offset API),偏移量提交接口(Offset Commit API),偏移量获取接口(Offset Fetch API)

           如何发送数据,只要研究一下生产消息接口就有一个简单了解啦,贴一下,JSON版本的API,方便理解(根据源码改的,实际请求API非JSON这种序列化方式,而是自定义的序列化的方式)

          

           1,从上面可以看出kafka-client,每次发送消息的时候,不是一条一条发,而是有一个集合这种概念,kafka-client 将同一个topic的partition下的请求,都放到一起,构成messageSet
      2,然后按照topic分组,批量发送消息   

          结合着kafka 消息模型(V0 版本)或许大家理解起来上面的json api,更容易

                

      crc32(4B):crc32校验值。校验范围为magic至value之间。
      magic(1B):消息格式版本号,此版本的magic值为0。
      attributes(1B):消息的属性。总共占1个字节,低3位表示压缩类型:
      key length(4B):表示消息的key的长度。如果为-1,则表示没有设置key,即key=null。
      key:可选,如果没有key则无此字段。
      value length(4B):实际消息体的长度。如果为-1,则表示消息为空。
      value:消息体。可以为空,比如tomnstone消息。

      具体实现

          1,内存分配

                 kafka-client 不能无限制使用虚拟机内存,JVM还有其他线程需要内存,kafka-client可以使用的内存上限多少?,消息内存如何分配。

                参考kafka-client 内存分配和管理  https://www.cnblogs.com/huxuhong/p/13651696.html

         2,消息存储

               kafka 支持海量数据发送,如果JVM内存存储这一块如果不够优秀,根本无法支持这么庞大的QPS。

               参考 kafka-client 消息存储分析 https://www.cnblogs.com/huxuhong/p/13821491.html

         3,消息序列化及发送

              

  • 相关阅读:
    MySQL执行外部sql脚本文件的命令
    如何修改mysql 默认引擎为InnoDB?
    最新版的 vscode 怎么配置 Python?
    Go 后端主要做什么
    Go 语言 fmt.Sprintf (格式化输出)
    什么是弱类型语言、强类型语言?
    一个项目从立项到发布的流程
    工厂模式
    观察模式
    类之间的关系
  • 原文地址:https://www.cnblogs.com/huxuhong/p/13813654.html
Copyright © 2011-2022 走看看