Kafka(五)—— 自定义拦截器

创建类实现ProducerInterceptor接口

1.时间拦截器

package com.zch.kafka.interceptor;
​
import org.apache.kafka.clients.producer.ProducerInterceptor;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
​
import java.util.Map;
​
/**
 * Author: zhaoHui
 * Date: 2022/01/02
 * Time: 13:21
 * Description: 自定义时间拦截器
 */
public class TimeInterceptor implements ProducerInterceptor<String,String> {
​
    public void configure(Map<String, ?> configs) {
​
    }
​
    public ProducerRecord<String,String> onSend(ProducerRecord<String,String> record) {
​
        // 1、取出数据
        String value = record.value();
        // 2、创建一个新的record对象
        ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>(record.topic(), record.partition()
                , record.key(), System.currentTimeMillis() + "," + record.value());
​
        return producerRecord;
    }
​
    public void onAcknowledgement(RecordMetadata metadata, Exception exception) {
​
    }
​
    public void close() {
​
    }
​
}

2.次数拦截器

统计生产者发送成功和失败的次数

package com.zch.kafka.interceptor;
​
import org.apache.kafka.clients.producer.ProducerInterceptor;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
​
import java.util.Map;
​
/**
 * Author: zhaoHui
 * Date: 2022/01/02
 * Time: 13:30
 * Description:
 */
public class CountInterceptor implements ProducerInterceptor<String,String> {
​
    int success = 0;
    int error  = 0;
​
    public ProducerRecord<String, String> onSend(ProducerRecord<String, String> record) {
        return record;
    }
​
    public void onAcknowledgement(RecordMetadata metadata, Exception exception) {
​
        if (metadata != null){
         success ++;
        }else {
            error ++;
        }
    }
​
    public void close() {
        System.out.println("success"+success);
        System.out.println("error"+error);
    }
​
    public void configure(Map<String, ?> configs) {
​
    }
}

3.使用自定义拦截器

一个生产者可以使用多个拦截器,可将拦截器放在一个list数组中,将数组放置到配置文件中

package com.zch.kafka.producer;
​
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
​
import java.util.ArrayList;
import java.util.Properties;
​
/**
 * Author: zhaoHui
 * Date: 2022/01/02
 * Time: 13:35
 * Description:
 */
public class InterceptorProducer {
    public static void main(String[] args) {
        // 创建Kafka生产者的配置信息
        Properties properties = new Properties();
        properties.put("bootstrap.servers","zhaohui01:9092");
        // 序列化
        properties.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
        properties.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
        // 添加拦截器
        ArrayList<String> strings = new ArrayList<String>();
        strings.add("com.zch.kafka.interceptor.TimeInterceptor");
        strings.add("com.zch.kafka.interceptor.CountInterceptor");
​
        properties.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG,strings);
​
        // 创建生产者对象
        KafkaProducer<String, String> producer = new KafkaProducer<String, String>(properties);
​
        // 发送数据
        for (int i = 0; i < 10; i++) {
            producer.send(new ProducerRecord<String, String>("first02","bigdata","zhaochaohui--"+i));
        }
​
        // 关闭资源
        producer.close();
​
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值