当前位置: 首页 > wzjs >正文

网站建设 自学 电子版 pdf下载1元涨1000粉

网站建设 自学 电子版 pdf下载,1元涨1000粉,广州市区号,无锡网络公司哪家服务好一、Kafka消费者提交Offset的策略 Kafka消费者提交Offset的策略有 自动提交Offset: 消费者将消息拉取下来以后未被消费者消费前,直接自动提交offset。自动提交可能丢失数据,比如消息在被消费者消费前已经提交了offset,有可能消息…

一、Kafka消费者提交Offset的策略

Kafka消费者提交Offset的策略有

  1. 自动提交Offset:
    1. 消费者将消息拉取下来以后未被消费者消费前,直接自动提交offset。
    2. 自动提交可能丢失数据,比如消息在被消费者消费前已经提交了offset,有可能消息拉取下来以后,消费者挂了
  2. 手动提交Offset
    1. 消费者在消费消息时/后,再提交offset,在消费者中实现
    2. 手动提交Offset分为:手动同步提交、手动异步提交
  3. 什么是Offset
    1. 参考文章:Linux:【Kafka三】组件介绍

二、自动提交策略

        Kafka消费者默认是自动提交Offset的策略

        可设置自动提交的时间间隔

package com.demo.lxb.kafka;import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringSerializer;import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;/*** @Description: kafka消费者消费消息,自动提交offset* @Author: lvxiaobu* @Date: 2023-10-24 16:26**/
public class MyConsumerAutoSubmitOffset {private  final static String CONSUMER_GROUP_NAME = "GROUP1";private  final static String TOPIC_NAME = "topic0921";public static void main(String[] args) {Properties props = new Properties();// 一、设置参数// 配置kafka地址
//        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
//                "192.168.151.28:9092"); // 单机配置props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.154.128:9092,192.168.154.128:9093,192.168.154.128:9094"); // 集群配置// 配置消息 键值的序列化规则props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// 配置消费者组props.put(ConsumerConfig.GROUP_ID_CONFIG,CONSUMER_GROUP_NAME);// 设置消费者offset的提交方式// 自动提交:默认配置props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"true");// 自动提交offset的时间间隔props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");// 二、创建消费者KafkaConsumer<String,String> consumer = new KafkaConsumer<String,String>(props);// 三、消费者订阅主题consumer.subscribe(Arrays.asList(TOPIC_NAME));// 四、拉取消息,开始消费while (true){// 从kafka集群中拉取消息ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));// 消费消息,当前是自动提交模式,在消息上一行消息被拉取下来以后,offset就自动被提交了,下面的代码如果出错,或者此时// 消费者挂掉了,那么消费其实是没有进行消费的(也就是业务逻辑处理)for (ConsumerRecord<String, String> record : records) {System.out.println("接收到的消息: 分区: " + record.partition() + ", offset: " + record.offset()+ ", key值: " + record.key() + " , value值: "+record.value());}}}
}

上述代码中的如下代码是自动提交策略的相关设置 

        // 设置消费者offset的提交方式// 自动提交:默认配置props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"true");// 自动提交offset的时间间隔props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");

三、手动提交策略

3.1、手动同步提交策略

        手动同步提交,会在提交offset处阻塞。当消费者接收到 kafka集群返回的消费者提交offset成功的ack后,才开始执行消费者中后续的代码。

        因为使用异步提交容易丢失消息,固一般使用同步提交,在同步提交后不要再做其他逻辑处理。

package com.demo.lxb.kafka;import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringSerializer;import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;/*** @Description: kafka消费者消费消息,手动同步提交offset* @Author: lvxiaobu* @Date: 2023-10-24 16:26**/
public class MyConsumerMauSubmitOffset {private  final static String CONSUMER_GROUP_NAME = "GROUP1";private  final static String TOPIC_NAME = "topic0921";public static void main(String[] args) {Properties props = new Properties();// 一、设置参数// 配置kafka地址
//        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
//                "192.168.151.28:9092"); // 单机配置props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.154.128:9092,192.168.154.128:9093,192.168.154.128:9094"); // 集群配置// 配置消息 键值的序列化规则props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// 配置消费者组props.put(ConsumerConfig.GROUP_ID_CONFIG,CONSUMER_GROUP_NAME);// 设置消费者offset的提交方式// 手动提交offsetprops.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"false");// 自动提交offset的时间间隔:此时不再需要设置该值
//        props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");// 二、创建消费者KafkaConsumer<String,String> consumer = new KafkaConsumer<String,String>(props);// 三、消费者订阅主题consumer.subscribe(Arrays.asList(TOPIC_NAME));// 四、拉取消息,开始消费while (true){// 从kafka集群中拉取消息ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));//  业务逻辑处理for (ConsumerRecord<String, String> record : records) {System.out.println("接收到的消息: 分区: " + record.partition() + ", offset: " + record.offset()+ ", key值: " + record.key() + " , value值: "+record.value());}// 当for循环业务逻辑处理结束以后,再手动提交offset// 同步方式提交,此时会产生阻塞,当kafka集群返回了提交成功的ack以后,才会消除阻塞,进行后续的代码逻辑。// 一般使用同步提交,在同步提交后不再做其他逻辑处理consumer.commitAsync();// do anything}}
}

3.2、手动异步提交策略

        异步提交,不会在提交offset代码处阻塞,即消费者提交了offset后,不需要等待kafka集群返回的ack即可继续执行后续代码。但是在提交offset时需要提供一个回调方法,供kafka集群回调,来告诉消费者提交offset的结果。

package com.demo.lxb.kafka;import com.alibaba.fastjson.JSONObject;
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.serialization.StringSerializer;import java.time.Duration;
import java.util.Arrays;
import java.util.Map;
import java.util.Properties;/*** @Description: kafka消费者消费消息,手动异步提交offset* @Author: lvxiaobu* @Date: 2023-10-24 16:26**/
public class MyConsumerMauSubmitOffset2 {private  final static String CONSUMER_GROUP_NAME = "GROUP1";private  final static String TOPIC_NAME = "topic0921";public static void main(String[] args) {Properties props = new Properties();// 一、设置参数// 配置kafka地址
//        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
//                "192.168.151.28:9092"); // 单机配置props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.154.128:9092,192.168.154.128:9093,192.168.154.128:9094"); // 集群配置// 配置消息 键值的序列化规则props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// 配置消费者组props.put(ConsumerConfig.GROUP_ID_CONFIG,CONSUMER_GROUP_NAME);// 设置消费者offset的提交方式// 手动提交offsetprops.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"false");// 自动提交offset的时间间隔:此时不再需要设置该值
//        props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");// 二、创建消费者KafkaConsumer<String,String> consumer = new KafkaConsumer<String,String>(props);// 三、消费者订阅主题consumer.subscribe(Arrays.asList(TOPIC_NAME));// 四、拉取消息,开始消费while (true){// 从kafka集群中拉取消息ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));for (ConsumerRecord<String, String> record : records) {System.out.println("接收到的消息: 分区: " + record.partition() + ", offset: " + record.offset()+ ", key值: " + record.key() + " , value值: "+record.value());}// 异步提交,不影响后续的内容。// new OffsetCommitCallback是kafka集群会回调的方法,告诉消费者提交offset的结果consumer.commitAsync(new OffsetCommitCallback() {@Overridepublic void onComplete(Map<TopicPartition, OffsetAndMetadata> map, Exception e) {if(e != null){// 可将提交失败的消息记录到日志System.out.println("记录提交offset失败的消息到日志");System.out.println("消费者提交offset抛出异常:" + Arrays.toString(e.getStackTrace()));System.out.println("消费者提交offset异常的消息信息:" + JSONObject.toJSONString(map));}}});// 后续逻辑处理,不需要等到kafka集群返回了提交成功的ack以后才开始处理。//do anything}}
}

http://www.dtcms.com/wzjs/159785.html

相关文章:

  • 医疗网站怎么做seo网络安全
  • 做门户网站有前途吗手机建立一个免费网站
  • 沈阳做网站的公司有哪些免费的网站推广
  • 做的网站怎么打开是白板考研比较厉害的培训机构
  • 好大夫在线医生免费咨询广州做seo整站优化公司
  • 网站 建设文档网络广告营销成功案例
  • 做网站讯息男生最喜欢的浏览器
  • 一家只做代购的网站app推广一手单
  • 如何建设网站济南兴田德润o团队怎么样seo少女
  • 国外工业产品设计网站重庆seo培训
  • 做网站一般使用什么算法自助建站系统代理
  • 现在石家庄做网站的公司有哪几家百度快照怎么打开
  • 阿里云1M做网站网店无货源怎么做
  • 网站建设前台后台设计seo外链优化方法
  • 医药公司网站建设方案嘉兴seo
  • 做啊网站宁波专业seo外包
  • 成都兼职建设网站2022拉新推广平台
  • wordpress邮件样式美化结构优化设计
  • 网络宣传网站建设咨询googlechrome浏览器
  • 建设网站时怎么用外部字体百度推广的方式有哪些
  • 网站开发需要用到哪些资料网络推广怎么收费
  • 网站索引量怎么增加推广优化排名
  • 天津大学新校区建设网站室内设计师培训班学费多少
  • 王野天个人简介搜索引擎优化技术有哪些
  • 重点建设政协网站网络营销与传统营销的整合
  • 凡科互动小游戏辅助网站seo置顶
  • 有什么做视频的免费素材网站好优化是什么意思?
  • wordpress搜索不到插件关键词优化排名
  • 做网络网站需要三证么网站如何宣传推广
  • 进一步加强政府网站内容建设营销策划公司 品牌策划公司