kafka 生产者拦截器

生产者拦截器

kafka 消息发送到Broker 之前大概需要经过 生产者拦截器序列化器分区器 等一系列处理。本文主要介绍生产者拦截器

生产者拦截器可以在消息发送之前对消息进行拦截。它可以改变消息内容,包括key , value ,topic 等任何信息

通常不推荐修改key , topic , 我们可以给消息添加一些额外信息,比如版本号,过滤一些"非法"消息等。

拦截器接口介绍

java 复制代码
public interface ProducerInterceptor<K, V> extends Configurable {
    ProducerRecord<K, V> onSend(ProducerRecord<K, V> var1);

    void onAcknowledgement(RecordMetadata var1, Exception var2);

    void close();
}

生产者拦截器接口包含三个方法

  • onSend 方法可以对消息进行定制化修改

  • onAcknowledgement 在消息被应答或者发送失败时执行 该方法在IO线程执行,所以不要执行一些耗时操作,会影响消息投递速度

  • close 用于执行一些资源释放的工作

自定义生产者拦截器Demo

该生产者拦截器给消息添加个包含版本号信息的Header ,配置生产者

ProducerConfig.INTERCEPTOR_CLASSES_CONFIG 属性使其生效

java 复制代码
    private Map<String, Object> produceConfigs() {
        Map<String, Object> configMap = new HashMap<>();
        configMap.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
                "localhost:9092");
        configMap.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class);
        configMap.put(ProducerConfig.PARTITIONER_CLASS_CONFIG,CustomPartitioner.class);
        configMap.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, Arrays.asList(CustomerProduceInterector.class));
        return configMap;
    }
java 复制代码
public class CustomerProduceInterector implements ProducerInterceptor {
    @Override
    public ProducerRecord onSend(ProducerRecord producerRecord) {
    
        producerRecord.headers().add(new RecordHeader("version","v1".getBytes()));
        return producerRecord;
    }

    @Override
    public void onAcknowledgement(RecordMetadata recordMetadata, Exception e) {
        System.out.println("onAcknowledgement  ....");
    }

    @Override
    public void close() {

    }

    @Override
    public void configure(Map<String, ?> map) {

    }
}

结语

生产者拦截器还是比较简单,相应的还有消费者拦截器,我们平常业务也未必用到,殊途同归,在一些RPC框架比如dubbo服务提供方和消费端都有类似的拦截器,可以做一些链路追踪等等。

以上就是我个人的理解 喜欢的一起关注交流学习

相关推荐
Wo3Shi4七11 小时前
Kafka综合运用:怎么在实践中保证Kafka_高性能?
后端·kafka·消息队列
网安INF18 小时前
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
java·web安全·网络安全·kafka·漏洞·jndi注入
HAPPY酷1 天前
Kafka 和Redis 在系统架构中的位置
redis·kafka·系统架构
忆雾屿1 天前
云原生时代 Kafka 深度实践:06原理剖析与源码解读
java·后端·云原生·kafka
TCChzp1 天前
Kafka入门-消费者
分布式·kafka
安全系统学习2 天前
网络安全逆向分析之rust逆向技巧
前端·算法·安全·web安全·网络安全·中间件
Dnui_King2 天前
Kafka 入门指南与一键部署
分布式·kafka
TCChzp2 天前
Kafka入门-生产者
分布式·kafka
NoneCoder2 天前
Redux 实践与中间件应用
前端·react.js·中间件·面试
淡水猫.2 天前
Next.js 中间件鉴权绕过漏洞 CVE-2025-29927
javascript·安全·web安全·中间件