kafka入门之broker--通信协议
kafka的通讯协议是基于tcp之上的二进制协议,所有类型的请求和响应都是结构化的,由不同的初始类型构成。kafka使用这组协议完成各个功能的实现。
单个kafka client通常需要同时连接多个broker服务器进行数据交互,但每个broker之上只需要维护一个Socket连接用于数据传输。clients可能会创建额外的socket连接用于其他任务,如元数据获取以及组rebalance等。kafka自带的java clients使用了类似于epoll的方式在单个连接上不停的轮训以传输数据。
broker端某时刻只能处理一条请求的做法是为了保证不会出现请求乱序。clients端在实现时,需要自行保证请求发送顺序。
3中请求发送流向:
1.clients给broker发送请求
2.controller也能够给其他broker发送请求
3.follower副本所在的broker向leader副本所在broker发送请求。
请求/响应结构:
统一构建于多种初始类型之上:
初始类型:
所有的请求和响应都具有统一的格式,即size+Request/Response,其中的Size时int32表示的整数,表示了该请求或响应的长度信息。
请求=请求头部+请求体,请求体随类型变化,
请求头固定:
api_key:请求类型,int16整数表示
api_version:请求版本号,以int16整数表示
correlation_id:与对应响应的关联号,实际中用于关联response与request,方便用户调试和排错。该字段以int32整数表示
client_id:表示发出此请求的client ID,实际场景中用于区分集群上不同clients发送的请求。该字段是一个非空字符串。
响应=响应头部+响应体,响应体格式随请求类型变化,
响应头部固定:
corrlation_id:该字段值就是上面请求头部中的correlation_id。有了该字段,用户就能知道该请求对应于哪个请求了。
kafka推荐用户总是指定client_id和correlation_id,这样可以方便用户后续定位问题和debug。
1.0.0版本38个请求类型
produce请求:事务id+ack+timeout+[topic数据]

produce响应结构:

2.FETCH请求,既包括clients向broker发送的fetch请求,也包括分区follower副本发送给leader副本的fetch请求。格式为:
replica_id+max_wait_time+min_bytes+max_bytes+isolation_level+[topics]


3.client向broker发送metadata请求以获取指定topic的元数据信息。
请求处理流程:
kafka入门之broker--通信协议的更多相关文章
- 《OD大数据实战》Kafka入门实例
官网: 参考文档: Kafka入门经典教程 Kafka工作原理详解 一.安装zookeeper 1. 下载zookeeper-3.4.5-cdh5.3.6.tar.gz 下载地址为: http://a ...
- kafka 入门笔记 #1
kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...
- Kafka入门 --安装和简单实用
一.安装Zookeeper 参考: Zookeeper的下载.安装和启动 Zookeeper 集群搭建--单机伪分布式集群 二.下载Kafka 进入http://kafka.apache.org/do ...
- Kafka 入门三问
目录 1 Kafka 是什么? 1.1 背景 1.2 定位 1.3 产生的原因 1.4 Kafka 有哪些特征 消息和批次 模式 主题和分区 生产者和消费者 broker 和 集群 1.5 Kafka ...
- 转 Kafka入门经典教程
Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...
- _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- 全网最通俗易懂的Kafka入门!
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在这篇之前已经写过两篇基础文章了,强烈建议先去阅读: ...
- 【转帖】全网最通俗易懂的Kafka入门
全网最通俗易懂的Kafka入门 http://www.itpub.net/2019/12/04/4597/ 前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://g ...
- [转帖]kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
kafka入门:简介.使用场景.设计原理.主要配置及集群搭建 http://www.aboutyun.com/thread-9341-1-1.html 还没看完 感觉挺好的. 问题导读: 1.zook ...
- kafka 入门
李克华 云计算高级群: 292870151 195907286 交流:Hadoop.NoSQL.分布式.lucene.solr.nutch kafka入门:简介.使用场景.设计原理.主要配置及集群搭 ...
随机推荐
- Alibaba Spring Cloud 微服务介绍(一)
" Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件 ...
- How to: Debug X++ Code Running in .NET Business Connector [AX 2012]
This topic has not yet been rated - Rate this topic http://msdn.microsoft.com/EN-US/library/bb19006 ...
- maven 搭建私服
博客参考 https://www.cnblogs.com/luotaoyeah/p/3791966.html 整理纯为技术学习 1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程 ...
- 直播软件开发之Java音视频解决方案:音视频基础知识
概念 从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余.音频信号在时域和频域上具有相关性,也即存在数据冗余.将音频作为一个信源,音频编码的实质是减少音频中的冗余. 拟信 ...
- css 两边宽度固定中间自适应宽度
#content_left{ //左 width:73px; height:100px; vertical-align:middle; margin-right:-100px; float:lef ...
- Spring5.0源码学习系列之浅谈BeanFactory创建
Spring5.0源码学习系列之浅谈BeanFactory创建过程 系列文章目录 提示:Spring源码学习专栏链接 @ 目录 系列文章目录 博客前言介绍 一.获取BeanFactory主流程 二.r ...
- 如何使用 gitlab 或 github 执行npm run build
一: 如何快速搭建一个组件库 首先,我们介绍一个快速包装组件库的工具:https://github.com/yanhaijing/jslib-base 按照文档来,就简单几步: npx @js ...
- Linux 8个有力的Awk内建变量
Awk 有几个非常强力的内置变量.通常来说,分为两种类型的内置变量: 第一种是定义的变量可以改变, 比如字段分隔(FS)与记录分隔(RS) 第二种是可以用来数据处理或者数据总结,比如记录数(NR)与字 ...
- 手把手教你使用Vuex(一)
1.定义 vuex 是一个专门为vue.js应用程序开发的状态管理模式. 这个状态我们可以理解为在data中的属性,需要共享给其他组件使用的部分.也就是说,是我们需要共享的data,使用vuex进行统 ...
- 【JVM第二篇--类加载机制】类加载器与双亲委派模型
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.什么是类加载器 在类加载过程中,加载阶段有一个动作是"通过一个类的全限 ...