与任何技术一样,Kafka 也有其局限性 - 其中之一是 1 MB 的最大封装大小。这只是默认设置,但不应轻易更改。

有三种可能性:

调整默认设置
某些较大的消息 (10 MB) 也会影响群集的性能,因此不建议这样做。
将数据集划分为较小的单元
这是可能的,但会显著增加复杂性,同时增加使用者对内存的需求。 仅向 Kafka 群集发送对数据的引用,并存储在另一个容器中的数据包这是大多数应用程序的建议方法。它只是稍微增加了应用程序的复杂性,并保留了所有使Kafka如此有趣的功能。

在下面,我将详细介绍不同的方法以及如何实现它们。

1. 调整默认设置message.max.bytes

必须以下四个都要设置

Producer: max.request.size
Broker: replica.fetch.max.bytes
Broker: message.max.bytes
Consumer: fetch.message.max.bytes

调整这些设置后,从技术上讲,您可以处理消息,达到新设置的限制。但是,您很快就会注意到性能问题。从 10 MB 开始,损伤变得明显 (1)。您可以通过大幅提高堆空间来解决此问题。但是,没有好的经验法则。此外,它影响不同的组件:生产者,消费者和broker。

2. 将数据包划分为小型单元

这是一个显而易见的方法,因为不需要其他技术,因此性能完全取决于 Kafka 群集。但是,此方法要求对生产者进行一些调整,增加逻辑,增加使用者的内存需求。
额外的复杂性产生于这样一个事实,即消息的段通常不会在日志中一个又一个写入,而是被另一个消息的段中断。

注意:只有在只有单个幂等生产者写入每个分区的特殊情况下,消息的段是连续的。在这些情况下,实现相对简单,并且最多需要从使用者那里获得尽可能多的内存,因为消息可以很大。

生产者:
生产者将消息拆分为段,并为这些段提供其他元数据。一方面,需要段计数器,以便使用者能够按正确的顺序将段放在一起。另一方面,需要消息 ID,以便段可以分配给消息。第三,您应该确保包括段数和校验和,以便整个事情可以轻松和一致地重新放在一起。

由于生产者仅在成功传输最后一段后调用生产者回调来确认消息的发送,因此此 ID 可以从消息本身确定派生,这一点很重要。当生产者在已发送某些段后崩溃时,将这样做。

producer_fault.svg
图 2:生产者在传输消息的所有段之前崩溃
如果另一个生产者接手,他不知道哪些段已发送到群集。因此,他或她再次传输整个消息。这意味着第一个段发送两次。使用者必须能够确定这一点。这可以通过从消息派生的 ID 来保证。但是,对于随机 UUID,这是不可能的。

消费者:
由于一条消息的段可以被另一个消息的段中断,使用者必须缓冲后续消息的段,直到它完全读取它最初接收段的消息。只有当邮件的所有部分都重新组合以形成原始邮件时,才能处理它。
使用者偏移量也只会更新为缓冲区中剩余消息的最旧段的偏移量。

为了确保使用者可靠工作,使用者中的段缓冲区绝不能大于可用内存。可以通过首先处理消息(首先完成)来减少内存需求。这意味着您不应处理您首次收到段的消息,如上所述。但是,消费者偏移处理会更加复杂,并且该过程有进一步的限制 (2)。

还可以以内存要求限制为原始消息的大小的方式构建使用者。但是,这需要具有更多逻辑的多级使用者。如果您想了解更多有关此信息的信息,请亲自与我联系。

3. 处理引用而不是数据

最安全、最简单的过程是将数据存储在外部内存中,并且只使用 Kafka 处理对外部存储数据的引用。使用者读取对数据的引用并从外部内存中检索它们。当然,外部内存必须是故障安全和快速的,因为外部内存中的写入和读取是此系统中的限制因素。因此,我们建议您使用高度可用的云存储,并允许并行读写。

还有一个问题,即何时应该删除外部内存中的数据。如果只有一个使用者从分区读取,则可以在读取或更新使用者偏移量后立即删除数据。否则,建议为数据选择与引用位于主题相同的保留时间。

选择方式

只有当数据包小于10M时更改默认设置才有意义,另外还必须在测试环境测试是否需要额外的资源.

如果您希望不需使用其他技术,并愿意研究更复杂的消费者,建议将消息细分为较小的包。同时,应当考虑到生产者的性质。如果很可能同时发送许多大型消息,则可能需要切换到不同的模式。

在所有其他情况下,建议将数据存储在外部,并且仅使用 Kafka 处理对数据的引用。

参考

彻底搞懂 Kafka 消息大小相关参数设置的规则
https://objcoding.com/2020/05/18/kafka-msg-size-setting/
Bericht - Large data packets and Kafka
https://ipt.ch/en/impuls/large-data-packets-and-kafka

kafka处理大数据包相关推荐

  1. MTU问题导致大数据包出不去。

    MTU问题导致大数据包出不去.需要把MTU的值改小点 ifconfig 可以查看到 MTU的值 cd /etc/sysconfig/network-scripts/  vi ifcfg-eth0 进行 ...

  2. Qt QTcpSocket 客户端设计(自动重连、多线程处理、发送大数据包、同步方式)

    1.头文件 #ifndef TCPTOOL_H #define TCPTOOL_H#include <QObject> #include <QTcpSocket> #inclu ...

  3. linux、windows中ping大数据包的命令格式

    linux下ping包的默认大小为64Byte,次数不限.但有时我们需要尝试ping大数据包,来测试网络的状况,这时,就要指定ping包的大小了. Linux下ping大数据包的格式; 语  法:pi ...

  4. windows与linux中,ping大数据包的命令格式

    日常工作中,为了测试网络的质量,经常会有ping大数据包的场景. Linux环境下,命令格式:ping -s [1-65507] x.x.x.x Windows环境下,命令格式:ping -l [1- ...

  5. Apache Kafka:大数据的实时处理时代

    在过去几年,对于 Apache Kafka 的使用范畴已经远不仅是分布式的消息系统:我们可以将每一次用户点击,每一个数据库更改,每一条日志的生成,都转化成实时的结构化数据流,更早的存储和分析它们,并从 ...

  6. 【备忘】最新spark/hadoop/hbase/hive/kafka/redies大数据视频教程

    day01 软件安装.Linux相关.shell     day02 自动化部署高级文本命令     day03 集群部署zookeeper     day04 并发动态大数据机制.Java反射.动态 ...

  7. linux udp端口大数据包,Linux协议栈中UDP数据报从网卡到用户空间流程总结

    NAPI驱动流程: 中断发生 -->确定中断原因是数据接收完毕(中断原因也可能是发送完毕,DMA完毕,甚至是中断通道上的其他设备中断) -->通过netif_rx_schedule将驱动自 ...

  8. Delphi---TServerSocket和TClientSocket发送和接收大数据包

    https://www.cnblogs.com/zhangzhifeng/p/6065244.html TServerSocket和TClientSocket用非阻塞模式发送和接收比较大的数据时,可能 ...

  9. 2021年大数据Kafka(二):❤️Kafka特点总结和架构❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Kafka特点总结 kafka特点总结 二.Kafka架 ...

最新文章

  1. 面向药物发现的深度图学习
  2. 关于li标签之间的间隔如何消除!
  3. 笔记-项目采购管理-合同类型-成本加激励费用合同
  4. ios设置中性黑体_ios 解决自定义字体无法显示问题
  5. MySQL日志文件之错误日志和慢查询日志详解
  6. SAP UI5 main page design
  7. 汽车电子知识篇(十二)-汽车域控制器主芯片选型
  8. Optimizing regular expressions in Java
  9. Jenkins + Docker 简单部署 node.js 项目
  10. java解析axure原型rp文件_AxureRP原型制作中在线文件的存储方案
  11. 【附源码】计算机毕业设计SSM小微企业ERP软件物料需求模块设计
  12. Python 的IDE——PyCharm
  13. wpa_supplicant, wpa_cli用法
  14. eden区分配至s0、s1
  15. ncist网络空间安全专业护网方向认知实习笔记2021.12 DAY1.2
  16. PHP在线客服即时通讯源码
  17. 一篇文带你了解JDK 13新特性,保姆级教程!!!
  18. java开发装机指南
  19. excel 首行下示例格式_Excel条件格式示例
  20. 计算机专业相关认证证书含金量对比

热门文章

  1. 《算法图解》——二分查找
  2. macbook快捷键_MacBook 键盘的「fn」键有什么用
  3. crontab 每天凌晨12点定时器_双十一预售:李佳琦薇娅凌晨12:00点,观看次数双双破亿...
  4. python读取成功_Python如何从文件读取数据()
  5. 已解决:Cannot find ./catalina.sh The file is absent or does not have execute permission This file is ne
  6. Java基础教程【第一章:Java概述】
  7. ps人像精修照片步骤_15天零基础自学PS!送你整套PS教程297集+视频+素材+源文件模板6...
  8. 基于hadoop构建对象存储系统_基于Hadoop企业私有云存储平台的构建
  9. python文件读写到list_Python文件读写
  10. pythonjson实例_python对json的相关操作实例详解