Kafka生产者原理解析

本文详细解析了Kafka生产者的工作流程,包括初始化生产者、消息发送、分区策略和生产者配置。介绍了如何创建生产者、设置分区策略、配置acks、buffer.memory等关键参数,并探讨了producer拦截器的作用。通过理解这些概念,有助于深入理解Kafka的生产者机制。
摘要由CSDN通过智能技术生成

kafka消息发送流程

流程图如下所示:
image

  1. 先初始化一个ProducerRecord对象,其中包含Topic和Value。key和Partion可选,初始化完成后会进行序列化
  2. 数据被传到分区器,如果ProducerRecord对象指定了分区直接进入下一步,否则会根据ProducerRecord对象的key选择一个分区。在确定分区后,这条记录会被添加到一个记录批次。这个批次的消息会被发送到指定的主题和分区上
  3. 服务器收到消息后返回相应,如果消息写入成功,返回一个RecordMetaData对象,包含主题和分区信息,以及记录在分区里的偏移量;如果写入失败,会返回一个错误,生成着在收到错误后会尝试重新发送消息,重试多次失败后返回错误信息。

Kafka创建生产者

初始化生产者发送消息示例

初始化消息生产者有3个必选参数:

  1. boostrap.servers:指定broker的地址列表,格式为host:port。列表无需提供所有的broker地址,生产者会从给定的broker中查找到其他broker的消息,但建议至少提供两个,确保在其中一个宕机情况下,生产者仍然能够连接到集群
  2. key.serializer:指定发送消息的序列化类型,生产者在发送消息前,如果key为复杂Java对象,需要进行序列化,可以通过这个配置指定序列化类型,序列化类型必须实现org.apache.kafka.common.serialization.Serializer接口。
  3. value.serializer:指定值序列化类型,类似与key.serializer

创建和发送消息的流程示例如下所示:

Properties properties = new Properties();
// 指定broker连接
properties.put("bootstrap.servers", "127.0.0.1:9092");
// 指定key序列化器,这里为字符串序列化器
properties.put("key.serializer", StringSerializer.class.getName());
// 指定值序列化器,这里为字符串序列化器
properties.put("value.serializer", StringSerializer.class.getName());
// 初始化生产者
KafkaProducer<String, String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值