kafka生产者Producer、消费者Consumer的拦截器interceptor

1、Producer的拦截器interceptor,和consumer端的拦截器interceptor是在kafka0.10版本被引入的,主要用于实现clients端的定制化控制逻辑,生产者拦截器可以用在消息发送前做一些准备工作,使用场景,如下所示:

  1)、按照某个规则过滤掉不符合要求的消息。
  2)、修改消息的内容。
  3)、统计类需求。

 1 package com.demo.kafka.listener;
 2 
 3 import java.util.Map;
 4 
 5 import org.apache.kafka.clients.producer.ProducerInterceptor;
 6 import org.apache.kafka.clients.producer.ProducerRecord;
 7 import org.apache.kafka.clients.producer.RecordMetadata;
 8 
 9 /**
10  * 生产者拦截器
11  * 
12  * @author 生产者拦截器
13  *
14  */
15 
16 public class ProducerInterceptorPrefix implements ProducerInterceptor {
17 
18     // 发送成功计数
19     private volatile long sendSuccess = 0;
20 
21     // 发送失败计数
22     private volatile long sendFailure = 0;
23 
24     /**
25      * 
26      */
27     @Override
28     public void configure(Map configs) {
29 
30     }
31 
32     /**
33      * 发送消息已经操作消息的方法
34      */
35     @Override
36     public ProducerRecord onSend(ProducerRecord record) {
37         String modifiedValue = "前缀prefix : " + record.value();
38         ProducerRecord producerRecord = new ProducerRecord(
39                 record.topic(), // 主题
40                 record.partition(), // 分区
41                 record.timestamp(), // 时间戳
42                 record.key(), // key值
43                 modifiedValue,  // value值
44                 record.headers()); // 消息头
45         return producerRecord;
46     }
47 
48     /**
49      * ack确认的方法
50      */
51     @Override
52     public void onAcknowledgement(RecordMetadata metadata, Exception exception) {
53         if(exception == null) {
54             sendSuccess++;
55         }else {
56             sendFailure++;
57         }
58     }
59 
60     /**
61      * 关闭的方法,发送成功之后会将拦截器关闭,调用此方法
62      */
63     @Override
64     public vo

你可能感兴趣的:(kafka,java,分布式,zookeeper,大数据)