Kafka生产者概览
流程概述: 创建一个ProducerRecord对象,需要包含topic和要发送的内容,还可以指定键或分区。在发送ProducerRecord对象时,生产者要先把键和值对象序列化成字节数组。然后数据传给分区器,如果对象中指定了分区,那分区器直接把指定的分区返回,如果没有指定,分区器会根据ProducerRecord的键选择一个分区。这条记录随后被添加到记录批次里,这个批次里的所有消息会被发送到相同的主题和分区上。最后服务器收到消息成功写入会返回一个RecordMetaData对象,包含了主题和分区信息,以及记录在分区里的偏移量。如果写入失败,就会返回错误信息,生产者收到错误后会尝试重新发送,几次之后如果还是失败就返回错误信息。
创建Kafka生产者
这里只指定了必要的属性,其他使用默认配置
private Properties kafkaProps = new Properties();
kafkaProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "broker1:9092,broker2:9092");
kafkaProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
kafkaProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
KafkaProducer<String, String> producer = new KafkaProducer<>(kafkaProps);
- 指定了broker的地址清单,建议至少提供两个broker信息,其中一个宕机,生产者仍然能够连接到集群上。
- 指定了消息的键和值都是String
Kafka客户端默认提供了ByteArraySerializer、StringSerializer和IntegerSerializer接口的类。
发送消息到Kafka
简单配置
ProducerRecord<String, String> record = new ProducerRecord<>("topic11", "key11