大家好,如果您还对深入解析Kafka的内部通信机制不太了解,没有关系,今天就由本站为大家分享深入解析Kafka的内部通信机制的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
基本数据类型
定长数据类型:int8、int16、int32、int64,分别对应Java中的byte、short、int、long。
可变长度数据类型:字节和字符串。变长数据类型由两部分组成,分别是有符号整数N(代表内容的长度)和N字节的内容。其中,N为-1,表示内容为空。字节的长度用int32表示,字符串的长度用int16表示。
数组:数组由两部分组成,分别是一个长度为N的数组和由一个int32类型的数字表示的N个元素。
请求和响应的基本结构
Kafka 中两个角色之间通信的基本单位是请求/响应。 Request和Response的基本结构如下:
请求或响应=消息大小(请求消息|响应消息)
各个字段的含义是:
名称类型描述
MessageSizeint32 表示RequestMessage或ResponseMessage的长度
RequestMessage/ResponseMessage - 表示Request或Response的内容。下面介绍其具体格式。
该结构定义了通信双方之间交换数据的基本结构。通信过程可以简单表示为:客户端与服务器打开Socket,然后向Socket写入一个int32数,表示本次发送的Request有多少字节,然后继续写入对应的字节数数据传入Socket。服务器首先读取一个int32整数来获取Request的大小,然后读取对应字节数的数据来获取Request的具体内容。服务器处理完请求后,也以同样的方式发送响应。
http://www.developcls.com/qa/aa553024f85d4341b5668e843cc4e59a.html
请求消息的结构
RequestMessage的结构如下:
RequestMessage=ApiKey ApiVersion CorrelationId ClientId 请求
名称类型描述
ApiKeyint16 代表本次请求的API编号
ApiVersionint16 表示请求的API 的版本。有了版本,就可以实现向后兼容
CorrelationIdint32 是客户端指定的数字,唯一标识此请求的id。服务器处理完请求后,也会将相同的CorrelationId 写入Response 中,以便客户端将请求与响应进行匹配。
ClientIdstring是客户端指定的描述客户端的字符串。它将用于日志记录和监控。它唯一标识一个客户端。
请求-请求的具体内容。
响应消息结构
ResponseMessage的结构如下:
ResponseMessage=CorrelationId 响应
名称类型描述
CorrelationIdint32对应Request的CorrelationId。
响应- 与请求相对应的响应。不同的Request的Response的字段是不同的。
信息
Kafka 是一个分布式消息系统。 Producer生产消息并推送给Broker,然后Consumer从Broker获取(Pull)消息。 Producer产生的消息用Message来表示。对于用户来说,它是一个键值对。我们来看看它的结构。
消息=Crc MagicByte 属性键值
名称类型描述
CRCint32表示本条消息的校验码(不包括CRC字段本身)
MagicByteint8表示消息格式的版本,用于向后兼容。当前值为0。
Attributesint8 表示该消息的元数据。目前,使用最低两位数字来表示压缩格式。
Keybytes代表这条消息的Key,可以为null
Valuebytes 表示该消息的值。 Kafka 支持消息嵌套,这意味着将一条消息作为Value 放置在另一条消息中。
消息集
MessageSet用于组合多个Message。它将Offset 和MessageSize 添加到每个Message。其结构为:
MessageSet=[消息偏移量MessageSize]
它的含义是MessageSet是一个数组。数组的每个元素由三部分组成,分别是Offset、MessageSize和Message。它们的含义是:
名称类型描述
Offsetint64用作日志中的序列号。 Producer在生产消息时并不知道具体的值,因此可以填写任意数字。
MessageSizeint32表示此Message的大小
Message——表示该Message的具体内容。其格式如上一节所示。
消息压缩
Kafka支持以下压缩方式:
压缩编码
无压缩0
压缩包1
快闪2
LZ43
编码是Message的Attribute的最低两个值。
由于单个消息中可能不会有太多重复的内容,因此通常会将多个消息放在一起形成一个MessageSet,然后将MessageSet放入一个Message中以提高压缩比。
Request/Respone 和Message/MessageSet 的关系
请求/响应是通信层的结构。与网络的7层模型相比,它与TCP层类似。
Message/MessageSet定义了业务层的结构,类似于7层网络模型中的HTTP层。 Message/MessageSet只是Request/Response有效负载中的一个数据结构。
【深入解析Kafka的内部通信机制】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
想了解一下Kafka在消息传递方面具体有什么优势,相比其他技术栈有哪些不同?
有17位网友表示赞同!
听说Kafka处理实时数据的效率很高,是适合做数据流分析的吗?
有7位网友表示赞同!
看资料说Kafka支持多种语言开发,请问具体的开发体验如何比较轻松吗?
有8位网友表示赞同!
有没有什么学习资源推荐?想深入了解Kafka的通讯协议,掌握相关的运作机制。
有19位网友表示赞同!
在实际应用中,Kafka最常用于哪些场景呢?
有6位网友表示赞同!
想要了解一下Kafka集群搭建和维护的难点,以及一些常见问题解决方案。
有19位网友表示赞同!
Kafka的数据持久化方案是什么样子?安全性如何保证?
有20位网友表示赞同!
在大规模数据传输时,Kafka的性能表现如何?能满足高并发需求吗?
有8位网友表示赞同!
想问问Kafka的消息确认机制是怎么实现的?能确保消息可靠性吗?
有10位网友表示赞同!
关于Kafka和Elasticsearch的集成,有什么好的实践案例可以参考嗎?
有9位网友表示赞同!
Kafka的主题部署策略有哪些? 复杂场景下如何管理主题数量?
有8位网友表示赞同!
想知道 Kafka的消费模型有哪些种类的?选择何种模型依据什么因素?
有14位网友表示赞同!
在高延迟情况下的消息处理,Kafka能提供哪些解决方案?
有15位网友表示赞同!
关于Kafka与Kubernetes的整合,有什么需要注意的地方吗?
有13位网友表示赞同!
Kafka的存储方式是什么? 如何实现数据备份和恢复?
有7位网友表示赞同!
想了解Kafka中日志管理和监控机制的运作方式。
有16位网友表示赞同!
Kafka安全防护措施有哪些?如何避免恶意攻击?
有6位网友表示赞同!
Kafka的发展趋势是什么? 未来会有哪些新的特性?
有8位网友表示赞同!