一、kafka java客户端数据生产流程解析
- 构造一个produceRecord对象, 需要要指定主题和值(value),key和分区可以暂时不指定。
- 发送信息,由于信息是通过网络传输的,所以需要对传输的值进行序列化,将其变成字节码进行传输。可以进行同步发送、异步发送。
- 序列化器:消息要到网络上进行传播,必须进行序列化,而序列化器的作用就是如此,kafka提供了大量的序列化器,如果不满足需求,可以自定义序列化器。实现 Serializer 接口。
- 分区器:本身kafka是有分区策略的,如果未指定,则使用默认策略。kafka会根据传递消息的key进行分区的分配,即hash(key)%numPartitions,如果key相同的话,就会被分到同一分区。
- 拦截器:(kafka 0.10版本引入),实现客户端控制化逻辑。
二、消息发送类型
//发送消息
try {
Future<RecordMetadata> sendResult = producers.send(producerRecords);
RecordMetadata recordMetadata = sendResult.get();
//todo 成功发送后的处理逻辑
System.out.println("偏移量:获取此分区下的消息的起始位置"+recordMetadata.hasOffset());
System.out.println("分区:"+recordMetadata.partition());
System.out.println("主题:"+recordMetadata.topic());
} catch (Exception e) {
e.printStackTrace();
//todo 抛出异常时候的处理逻辑
}
try {
Future<RecordM