打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
生产者概览

一个应用程序在很多情况下需要往Kafka 写入消息:记录用户的活动(用于审计和分析)、记录度量指标、保存日志消息、记录智能家电的信息、与其他应用程序进行异步通信、缓冲即将写入到数据库的数据,等等。

多样的使用场景意味着多样的需求:是否每个消息都很重要?是否允许丢失一小部分消息?偶尔出现重复消息是否可以接受?是否有严格的延迟和吞吐量要求?

例如,在一个信用卡事务处理系统里,有一个客户端应用程序,它可能是一个在线商店,每当有支付行为发生时,它负责把事务发送到Kafka 上。另一个应用程序根据规则引擎检查这个事务,决定是批准还是拒绝。批准或拒绝的响应消息被写回Ka仅a ,然后发送给发起事务的在线商店。第三个应用程序从Kafka 上读取事务和审核状态,把它们保存到数据库,随后分析师可以对这些结果进行分析,或许还能借此改进规则引擎。在这个信用卡事务处理系统里,消息丢失或消息重复是不允许的,可以接受的延迟最大为500ms,对吞吐量要求较高我们希望每秒钟可以处理一百万个消息。

保存网站的点击信息是另一种使用场景。在这个场景里,允许丢失少量的消息或出现少量的消息重复,延迟可以高一些,只要不影响用户体验就行。换句话说,只要用户点击链接后可以马上加载页面,那么我们并不介意消息要在几秒钟之后才能到达Kafka 服务器。吞吐量则取决于网站用户使用网站的频度。

不同的使用场景对生产者API 的使用和配置会有直接的影响。尽管生产者API 使用起来很简单, 但消息的发送过程还是有点复杂的。下图展示了向Kafka 发送消息的主要步骤。


我们从创建一个ProducerRecord 对象开始, Producer Record 对象需要包含目标主题和要发送的内容。我们还可以指定键或分区。在发送ProducerRecord 对象时,生产者要先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。

接下来,数据被传给分区器。如果之前在Produc巳rR巳cord 对象里指定了分区,那么分区器就不会再做任何事情,直接把指定的分区返回。如果没有指定分区,那么分区器会根据ProducerRecord 对象的键来选择一个分区。选好分区以后,生产者就知道该往哪个主题和分区发送这条记录了。紧接着,这条记录被添加到一个记录批次里,这个批次里的所有消息会被发送到相同的主题和分区上。有一个独立的线程负责把这些记录批次发送到相应的broker 上。

服务器在收到这些消息时会返回一个响应。如果消息成功写入Kafka ,就返回一个RecordMetaData 对象,它包含了主题和分区信息,以及记录在分区里的偏移量。如果写入失败, 则会返回一个错误。生产者在收到错误之后会尝试重新发送消息,几次之后如果还是失败,就返回错误信息。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
真的,关于 Kafka 入门看这一篇就够了
消息队列三剑客:RabbitMQ、RocketMQ、Kafka全面对决
Kafka系列1:Kafka概况
Kafka权威指南
Kafka的安装与使用(转)
Kinesis和Kafka该怎么选?看看性能比较吧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服