kafka producer interceptor拦截器(五)
producer在发送数据时,会经过拦截器和序列化,最后到达相应的分区。在经过拦截器时,我们可以对发送的数据做进步的处理。
要正确的使用拦截器需要以下步骤:
1.实现拦截器ProducerInterceptor的方法
2.在producer的prop中配置
prop.put("interceptor.classes", "com.xxx.interceptor.xxxInterceptor")
如果是拦截器链的话,在后面追加即可
prop.put("interceptor.classes", ""com.xxx.interceptor.xxxInterceptor1,com.xxx.interceptor.xxxInterceptor2");
生产者的拦截器需要实现ProducerInterceptor接口中的方法来实现
@Override
public void configure(Map<String, ?> arg0) {} #获取broker的配置信息
@Override
public void close() {} #在producer关闭时调用此方法
@Override
public void onAcknowledgement(RecordMetadata recordMetadata, Exception e) {} #数据在写到broker时,无论是否成功的回调 @Override
public ProducerRecord<String, String> onSend(ProducerRecord<String, String> producerRecord) {} #拦截的信息
生产者:
public class ProducerDemo {
private static final Logger LOG = LoggerFactory.getLogger(ProducerDemo.class);
public static void main(String[] args) throws InterruptedException, ExecutionException {
//1.加载配置信息
Properties prop = loadProperties();
//2.创建生产者
KafkaProducer<String,String> producer = new KafkaProducer<>(prop);
//3.发送内容
String sendContent = "hello_kafka";
IntStream.range(0, 10).forEach(i ->{
try {
ProducerRecord<String,String> record = new ProducerRecord<>("test1",sendContent+"_"+i);
Future<RecordMetadata> future = producer.send(record);
RecordMetadata recordMetadata = future.get();
LOG.info("发送的数据是 :{},offset:是{},partition是:{}",sendContent,recordMetadata.offset(),recordMetadata.partition());
} catch (Exception e) {
e.printStackTrace();
}
});
producer.close(); //回调拦截器中的close方法
}
//配置文件的设置
public static Properties loadProperties() {
Properties prop = new Properties();
prop.put("bootstrap.servers", "192.168.100.144:9092,192.168.100.145:9092,192.168.100.146:9092");
prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
prop.put("interceptor.classes", "com.zpb.interceptor.ProducerInterceptorDemo,com.zpb.interceptor.ProducerInterceptorDemo2");
prop.put("acks", "all"); //发送到所有的ISR队列中
return prop;
}
}
拦截器一:
public class ProducerInterceptorDemo implements ProducerInterceptor<String, String>{
private static final Logger LOG = LoggerFactory.getLogger(ProducerInterceptorDemo.class);
private volatile long succNum = 0;
private volatile long failNum = 0;
@Override
public void configure(Map<String, ?> arg0) {
LOG.info("configure ==>"+arg0);
}
@Override
public void close() {
double succRatio = succNum/succNum+failNum;
LOG.info("成功率是:"+succRatio*100);
}
@Override
public void onAcknowledgement(RecordMetadata recordMetadata, Exception e) {
if(null == e){
succNum++;
}else{
failNum++;
}
}
@Override
public ProducerRecord<String, String> onSend(ProducerRecord<String, String> producerRecord) {
String prefixValue = producerRecord.value()+"prefix_1";
return new ProducerRecord<String, String>(producerRecord.topic(),prefixValue);
}
}
拦截器二:
public class ProducerInterceptorDemo2 implements ProducerInterceptor<String, String>{
@Override
public void configure(Map<String, ?> configs) {
}
@Override
public ProducerRecord<String, String> onSend(ProducerRecord<String, String> record) {
String prefixValue = record.value()+"prefix_2";
return new ProducerRecord<String, String>(record.topic(), prefixValue);
}
@Override
public void onAcknowledgement(RecordMetadata metadata, Exception exception) {
}
@Override
public void close() {
}
}
kafka producer interceptor拦截器(五)的更多相关文章
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- Spring MVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMvc中Interceptor拦截器用法
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆等. 一. 使用场景 1 ...
- SpringMVC 中的Interceptor 拦截器
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...
- SpringBoot-SpringMvc的Interceptor拦截器配置
Interceptor拦截器实现对每一个用户请求处理前后的业务处理,比如我们需要对用户请求进行响应时间的记录,需要记录请求从开始到结束所耗的时间,这时我们就需要用到拦截器了 下面我们以记录请求处理时间 ...
- SpringMVC中使用Interceptor拦截器顺序
一.简介 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验 证,或者是来判断用户是否登陆,或者是像1 ...
- 【tmos】如何在Interceptor拦截器中注入其他数据
光是这样是获取不到weixinConfig内容的 public class WebLoginInterceptor implements HandlerInterceptor { @Autowired ...
- SpringMVC中的Interceptor拦截器及与Filter区别
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- [转]SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
随机推荐
- java获取windows和linux下本机ip通用方法
public InetAddress getFirstNonLoopbackAddress(boolean preferIpv4, boolean preferIPv6) throws SocketE ...
- Greenplum 的发展历史
一.Greenplum的发展历史 Greenplum的发展可以分为下面6个阶段: 图 1 Greenplum时间线 Postgres关系型数据库.Postgres是UC Berkeley开发的关系 ...
- Python常用知识
基础模板(sys.os) http://c.biancheng.net/view/2407.html cmd中查看第三方库 eg:import aiohttp help(aiohttp) 或者dir( ...
- leetcode解题报告(2):Remove Duplicates from Sorted ArrayII
描述 Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For ex ...
- linux mysql5.7设置中文字符集
ubuntu16.04已测试 注意版本,好像从5.6根5.5就不一样,配置文件更深了一层. 1.用vim或nano编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 2.[ ...
- 爬虫之操作excel
几种常用模块的使用方法 注释:Excel 2003 即XLS文件有大小限制即65536行256列,所以不支持大文件,而Excel 2007以上即XLSX文件的限制则为1048576行16384列 下面 ...
- 【转载】Maven安装配置+ GIt&SVN + Jenkins详细配置 软件项目管理 持续集成实验
原文地址: https://www.cnblogs.com/clownice/p/5395933.html 以下是学习笔记: Jenkins是一款开源持续集成的软件,实现集成的自动化 自动构建工具:M ...
- Nice的应用整理
笔记清单 印象笔记 -- 知识,账号 Typora -- markdown编写 xmind 思维导图 sm.ms 图床 processon 流程图 愿望清单 滴答清单 -- 执行力,备忘录 账号 账号 ...
- 通过sqlserver用户操作远程服务器
USE masterGORECONFIGURE --先执行一次刷新,处理上次的配置GOEXEC sp_configure 'show advanced options',1 --启用xp_cmdshe ...
- 在Ubuntu上安装Qt5.2.0
分类: QT2013-12-16 14:44 3171人阅读 评论(0) 收藏 举报 QT官方站点的文档有点老.今天,我尝试着在我的Ubuntu 13.10上安装Qt 5.2.0.下面是我的步骤: 1 ...