kafka中的序列化器&分区器&拦截器
1.序列化器
序列化器的作用是在进行网络传输中将数据序列化为字节流进行传输,保证数据不会丢失,
kafka中的序列化器有:
- 字符串序列化器 StringSerializer
- 整形 IntegerSerializer
- 字节数组 ByteSerializer
a.实现接口
org.apache.kafka.common.serialization.Serializer
设置序列化器的方式
//设置key和value的序列化
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
//创建生产者
KafkaProducer<String, String> kafkaProducer = new KafkaProducer(properties);
//创建消费者
KafkaConsumer consumer = new KafkaConsumer(properties);
b.自定义序列化器
想要序列化的类
实现的序列化器
2.分区器
kafka本身有自己的分区策略,如果未指定,则采用默认的分区策略。
kafka默认的分区策略是根据key进行分区的分配,即hash(key) % numPartitions, numPartitions:分区数量,如果key相同,则被分配到同一个分区。
一般采用默认的分区器即可
a.实现接口
org.apache.kafka.clients.producer.Partitionser
分区器指定
//指定分区器
properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, DefaultPartitioner.class.getName());
b.自定义分区器
3.拦截器
拦截器主要用于client的定制化控制逻辑
生产者拦截器可以用在消息发送前做一些准备工作
使用场景:
- 按照某种规则过滤不符合要求的消息
- 修改消息内容
- 统计类需求
a.实现接口
org.apache.kafka.cllients.producer.ProducerInterceptor
//指定分区器
properties.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, 自定义拦截器.class.getName());