Kafka生产者
生产流程
一个ProducerRecord包含topic,partition,key,value。键和值要序列化才能在网络上传输,接下来到达分区器,如果没有指定分区,分区器会根据ProducerRecord对象的键来选择一个分区,指定了分区则直接返回。紧接着,这条记录被添加到一个记录批次里,这个批次里的所有消息都会发送到相同的主题和分区上。服务器收到后消息后会返回一个响应,如果消息成功写入Kafka,就会返回一个RecordMetaData,里面包含了topic,分区,分区偏移量。如果写入失败,则会返回一个错误,客户端后重试,几次失败,就会返回错误消息。
创建Kafka生产者
Kafka生产者有3个必选属性
bootstrap.servers: 该属性指定broker的地址清单,格式为host:port。清单里不需要包含所有的broker地址,生产者会从给定的broker里查找到其他broker的信息。建议提供两个broker,保证可用性。
key.serializer: broker希望接收到的消息的键和值都是字节数组,key.serializer必须被设置为一个实现了org.apache.kafka.common.serialization.Serializer接口的类。
value.serializer: 值得序列化器。
producer的发送时支持多线程的,所以高吞吐量时,可以增加线程数,如果还不够,可以增加生产者数量。
发送消息到Kafka
最简单的消息发送方式
用来发送不太重要的消息
ProducerRecord<String, String> record = new ProcuderRecord<>("CustomerCountry", "Precision Products", "France");
try {
producer.send(record);
} catch (Exception e) {
e.printStackTrace();
}
同步发送消息
ProducerRecord<String