|NO.Z.00036|——————————|BigDataEnd|——|Hadoop&kafka.V21|——|kafka.v21|消费者拦截器实验案例.v01|

一、消费者拦截器
### --- 消费者拦截器

~~~     消费者在拉取了分区消息之后,要首先经过反序列化器对key和value进行反序列化处理。
~~~     处理完之后,
~~~     如果消费端设置了拦截器,则需要经过拦截器的处理之后,才能返回给消费者应用程序进行处理。
~~~     如果拦截器是null,表示没有配置消费者拦截
                    if (fetcher.sendFetches() > 0 || client.hasPendingRequests())
                        client.pollNoWakeup();

                    if (this.interceptors == null)
                        return new ConsumerRecords<>(records);
                    else
                        return this.interceptors.onConsume(new ConsumerRecords<>(records));
二、消费端定义消息拦截器,需要实现
### --- 消费端定义消息拦截器,需要实现
### --- org.apache.kafka.clients.consumer.ConsumerInterceptor<K, V> 接口。

~~~     # 一个可插拔接口,
~~~     允许拦截甚至更改消费者接收到的消息。首要的用例在于将第三方组件引入消费者应用程序,
~~~     用于定制的监控、日志处理等。
~~~     # 该接口的实现类通过configre方法获取消费者配置的属性,
~~~     如果消费者配置中没有指定clientID,还可以获取KafkaConsumer生成的clientId。
~~~     获取的这个配置是跟其他拦截器共享的,需要保证不会在各个拦截器之间产生冲突。

~~~     # ConsumerInterceptor方法抛出的异常会被捕获、记录,
~~~     但是不会向下传播。如果用户配置了错误的key或value类型参数,
~~~     消费者不会抛出异常,而仅仅是记录下来。

~~~     # ConsumerInterceptor
~~~     回调发生在org.apache.kafka.clients.consumer.KafkaConsumer#poll(long)方法同一个线程。
三、该接口中有如下方法:
package org.apache.kafka.clients.consumer;
import org.apache.kafka.common.Configurable;
import org.apache.kafka.common.TopicPartition;
import java.util.Map;
public interface ConsumerInterceptor<K, V> extends Configurable {
    /**
    *
    * 该方法在poll方法返回之前调用。调用结束后poll方法就返回消息了。
    *
    * 该方法可以修改消费者消息,返回新的消息。拦截器可以过滤收到的消息或生成新的消息。
    * 如果有多个拦截器,则该方法按照KafkaConsumer的configs中配置的顺序调用。
    *
    * @param records 由上个拦截器返回的由客户端消费的消息。
    */
    public ConsumerRecords<K, V> onConsume(ConsumerRecords<K, V> records);
    /**
    * 当消费者提交偏移量时,调用该方法。
    * 该方法抛出的任何异常调用者都会忽略。
    */
    public void onCommit(Map<TopicPartition, OffsetAndMetadata> offsets);
    public void close();
}

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示