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<String, String> {
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<String, ?> configs) {
29
30 }
31
32 /**
33 * 发送消息已经操作消息的方法
34 */
35 @Override
36 public ProducerRecord<String, String> onSend(ProducerRecord<String, String> record) {
37 String modifiedValue = "前缀prefix : " + record.value();
38 ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>(
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的Producer和Consumer拦截器用于实现客户端的定制化逻辑,如消息过滤、内容修改和统计需求。详细讲解了生产者拦截器配置,并探讨了acks参数对于消息可靠性与吞吐量的影响,包括0、1和-1三种模式的场景分析。此外,还讨论了消费者如何订阅主题和使用正则表达式匹配多个主题。
最低0.47元/天 解锁文章
228

被折叠的 条评论
为什么被折叠?



