尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【学习笔记】kafka权威指南——第3章 kafka生产者—向kafka写入资料

【学习笔记】kafka权威指南——第3章 kafka生产者—向kafka写入资料
📅 发布时间:2026/6/18 5:51:58

第3章 kafka生产者—向kafka写入数据

3.1 生产者概览

各生产者的需求是不同的,包括延迟、吞吐量、是否允许丢失与重复等。生产者发送的是一个ProducerRecord对象,该对象包含目标主题和发送内容,键与分区可选。
ProducerRecord–>序列化器–>分区器(已指定不修改,未指定根据键分区)
然后该消息被添加到一个记录批次里,有独立的线程负责将记录批次发送到相应的broker,发送失败会重试,重试失败会抛出异常

3.2 创建kafka生产者

3个必选属性:
1>bootstrap.servers
生产者指定broker的地址清单,不必包含所有的,生产者会从给定的broker里查找到其他的broker信息,不过应至少给予两个broker信息,以防止其中一个宕机
2>key.serializer与value.serializer
broker期望收到字节数组,而生产者的key与value一般为Java对象,此时可指定完成了serializer接口的对象作key与value
创建生产者:设置配置参数及指定K,V类型

发送消息的三种方式:
否到达就是1>发送并忘记:发送消息且不关心
2>同步发送:使用send()发送,返回Future对象,可调用get()办法等待发送结果的返回
通过3>异步发送:send()技巧指定回调函数,再返回响应时调用,能够调用多个send()而不关心回调函数是否执行

3.3 发送消息到kafka

生产者的send手段将ProducerRecord作为参数发送,消息先进入缓冲区,再由单独线程发送,send方法可以有返回值,也有异常。

3.3.1 同步发送消息

通过send().get()方式可以得到RecordMetadata对象,能够获得偏移量等信息

3.3.2 异步发送消息

使用回调函数,DemoProducerCallback

3.4 生产者的配置

1> acks:必须由多少分区副本收到消息
0:不等待 1:首领收到即可 all:全副本收到才返回
2>buffer.memory:生产者内存缓冲区大小,当生产消息速度大于发送服务端速度,则阻塞或抛异常
3>compression.type:消息压缩方式,默认不压缩
snappy:性能好,gzip:占用cpu多,但压缩比高
4>reties:临时性错误重试次数
retry.backoff.ms:重试每次间隔,默认为100ms
5>batch.size:多个消息要发到同一个分区时,会放在一个批次缓冲发送。并不是满了才发
6>linger.ms:等待消息加入批次的时间,增加每条消息发送延迟,增大吞吐量
7>client.id:任意字符串,消息来源
8>max.in.flight.requests.pre.connection:在收到服务器响应之前可能发送多少消息,1表示顺序发送
9>timeout.ms:分区副本等待响应时间
request.timeout.ms:等待响应返回时间
metadata.fetch.timeout.ms:生产者获取元资料时间
10>max.block,ms:生产者发送缓冲区已满,或没有可用的元数据时阻塞的时间,到时后抛出异常
11>max.request.size:生产者发送一批次消息的最大值,broker对可接受消息大小也有限制配置
12>receive.buffer.byte与send.buffer.byte:
TCP接收和发送数据包缓冲区大小,为-1时使用操作系统默认值。跨数据中心时一般表现为高延迟,低带宽,可以适当增加以上两值。
【kafka分区消息在retries为0时不重试,与max.in.flight.request.per.connection为1,服务器响应前只发送一条消息,两者满足其1,分区消息才是严格顺序的】

3.5 序列化器

3.5.1 自定义序列化器

实现serializer接口
实现将Key/Value对象映射成byte数组的方法

3.5.2 利用Auro序列化

Key/Value.serializer指定kafkaAuroSerializer
【schema.registry.url指定schema地址可以应用schema的参数生成对象,而不用new对象】

3.6 分区

通过键能够作为值的附加消息,但一般情况下用户来做分区。
【键相同的消息会被写入同一个分区】
【默认的分区策略在key为null时轮询,在key有值时使用hash分区,同一个键一定在同一个分区中,但如果分区数改变了,那么同一个键不一定在之前的分区中】(这边倘若发送消息时指定了分区,同一个key应该也可能发送到不同的分区中)
自定义分区:实现Partitioner接口,建立partition方法

相关新闻

  • P15.神经网路的基本骨架——nn.Module的使用
  • function
  • P14.Dataloader的使用

最新新闻

  • ALMA望远镜揭示原行星盘与行星形成的奥秘
  • 武汉奢侈品回收门店横向测评|2026 闲置包包手表黄金变现避坑完整干货 - 奢品屋武汉奢侈品回收
  • 郑州黄金回收哪家靠谱?2026本地正规连锁机构测评与比价指南 - 奢品小当家
  • 号卡联盟app邀请码16888,官方公告填写注册一级代理佣金高,新手必填注册避坑指南 - 流量卡代理招商
  • Fenno API 完整使用指南:一个 Key 接入 Claude Code、Codex CLI、OpenCode
  • GLM-5深度解析:国产大模型的智能体工程范式跃迁

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号