文章目录
kafka消息发送流程
流程图如下所示:
- 先初始化一个ProducerRecord对象,其中包含Topic和Value。key和Partion可选,初始化完成后会进行序列化
- 数据被传到分区器,如果ProducerRecord对象指定了分区直接进入下一步,否则会根据ProducerRecord对象的key选择一个分区。在确定分区后,这条记录会被添加到一个记录批次。这个批次的消息会被发送到指定的主题和分区上
- 服务器收到消息后返回相应,如果消息写入成功,返回一个RecordMetaData对象,包含主题和分区信息,以及记录在分区里的偏移量;如果写入失败,会返回一个错误,生成着在收到错误后会尝试重新发送消息,重试多次失败后返回错误信息。
Kafka创建生产者
初始化生产者发送消息示例
初始化消息生产者有3个必选参数:
- boostrap.servers:指定broker的地址列表,格式为host:port。列表无需提供所有的broker地址,生产者会从给定的broker中查找到其他broker的消息,但建议至少提供两个,确保在其中一个宕机情况下,生产者仍然能够连接到集群
- key.serializer:指定发送消息的序列化类型,生产者在发送消息前,如果key为复杂Java对象,需要进行序列化,可以通过这个配置指定序列化类型,序列化类型必须实现org.apache.kafka.common.serialization.Serializer接口。
- 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