当前位置: 首页 > news >正文

生产者向 Kafka 发送消息的执行流程

(1)生产者要往 Kafka 发送消息时,需要创建 ProducerRecoder,代码如下:

ProducerRecord<String,String> record 
      = new ProducerRecoder<>("CostomerCountry","Precision Products","France");
      try{
      producer.send(record);
      }catch(Exception e){
        e.printStackTrace();
      }

(2)ProducerRecoder 对象会包含目标 topic分区内容,以及指定的 key 和 value,

在发送 ProducerRecoder 时,生产者会先把键和值对象序列化成字节数组

,然后在网络上传输。

(3)生产者在将

消息

发送到某个 Topic ,需要经过拦截器序列化器分区器(Partitioner)。

(4)如果消息 ProducerRecord 没有指定 partition 字段,那么就需要依赖分区器,根据 key 这个字段来计算 partition 的值。分区器的作用就是为消息分配分区

  1. 若没有指定分区,且消息的 key 不为空,则使用 murmur 的 Hash 算法(非加密型 Hash 函数,具备高运算性能及低碰撞率)来计算分区分配。
  2. 若没有指定分区,且消息的 key 也是空,则用轮询的方式选择一个分区。

(5)分区选择好之后,会将消息添加到一个记录批次中,这个批次的所有消息都会被发送到相同的 Topic 和 partition 上。然后会有一个独立的线程负责把这些记录批次发送到相应的 broker 中。

(6)broker 接收到 Msg 后,会作出一个响应。如果成功写入 Kafka 中,就返回一个 RecordMetaData 对象,它包含

Topic

Partition

信息,以及记录在分区的

offset

(7)若写入失败,就返回一个错误异常,生产者在收到错误之后尝试重新发送消息,几次之后如果还失败,就返回错误信息。

http://www.lryc.cn/news/66568.html

相关文章:

  • Linux命令·netstat
  • 《心安即是归处》读书笔记
  • C++:使用红黑树封装map和set
  • Go 命令
  • LEO、HW、LSO、LW 分别代表什么?
  • 问题 B: 跳石头(C++)(二分答案)
  • bugku——变量1
  • 网络数据包丢失监控
  • Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接
  • CSS面试题:30道含答案和代码示例的练习题
  • 时间轮的golang实践浅析
  • Linux命令_stress 快速模拟CPU、内存、磁盘消耗
  • 可视化绘图技巧100篇分析篇(二)-生存曲线(LM曲线)
  • UP主发车啦!撩人仙侠文系列,谁来管管这个反派啊!
  • K8S使用持久化卷存储到NFS(NAS盘)
  • 一图看懂 multidict 模块:类似于字典的键值对集合,键可以多次出现,资料整理+笔记(大全)
  • django CBV 与 DRF APIView源码分析
  • 沃尔玛入驻教程:中国卖家如何免费、快速入驻沃尔玛walmart.com?
  • 《花雕学AI》Poe 上的四种 AI 机器人,你该怎么选?ChatGPT、Sage、Claude 和 Dragonfly对比
  • localStorage
  • 二十五、SQL 数据分析实战(9个中等难度的SQL题目)
  • JavaSE_02基本语法-编程单词词汇
  • 区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测
  • 如何使用aframe.js构建一个简单的VR播放器
  • Fiddler抓包工具常见功能介绍,还不会的进来看
  • 基于海鸥算法优化的核极限学习机(KELM)分类算法-附代码
  • JAVA代码规范审查
  • Centos8安装redis7
  • RabbitMQ详解(一):Linux安装
  • Mojo:比 Python 快 35000 倍的 AI 编程语言