霸县网站建设赞友商城电商平台排名第几
web/
2025/9/27 3:04:18/
文章来源:
霸县网站建设,赞友商城电商平台排名第几,网站推广公司ihanshi,百度网站怎么做信息目录 一、Sticky分区分配策略原理二、Sticky分区分配策略 示例需求三、Sticky分区分配策略代码案例3.1、创建带有7个分区的sevenTopic主题3.2、创建三个消费者 组成 消费者组3.3、创建生产者3.4、测试3.5、Sticky分区分配策略代码案例说明 四、Sticky分区分配再平衡案例4.1、停… 目录 一、Sticky分区分配策略原理二、Sticky分区分配策略 示例需求三、Sticky分区分配策略代码案例3.1、创建带有7个分区的sevenTopic主题3.2、创建三个消费者 组成 消费者组3.3、创建生产者3.4、测试3.5、Sticky分区分配策略代码案例说明 四、Sticky分区分配再平衡案例4.1、停止某一个消费者后45s 以内重新发送消息示例4.2、停止某一个消费者后45s 以后重新发送消息示例4.3、Sticky分区分配再平衡案例说明 一、Sticky分区分配策略原理
粘性分区定义可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前考虑上一次分配的结果尽量少的调整分配的变动可以节省大量的开销。粘性分区是 Kafka 从 0.11.x 版本开始引入这种分配策略首先会尽量均衡的放置分区到消费者上面在出现同一消费者组内消费者出现问题的时候会尽量保持原有分配的分区不变化。
二、Sticky分区分配策略 示例需求
设置主题为 sevenTopic7个分区准备 3 个消费者采用粘性分区策略并进行消费观察 消费分配情况。然后再停止其中一个消费者再次观察消费分配情况。
三、Sticky分区分配策略代码案例
3.1、创建带有7个分区的sevenTopic主题 在 Kafka 集群控制台创建带有7个分区的sevenTopic主题 bin/kafka-topics.sh --bootstrap-server 192.168.136.27:9092 --create --partitions 7 --replication-factor 1 --topic sevenTopic3.2、创建三个消费者 组成 消费者组 复制 CustomConsumer1类创建 CustomConsumer2和CustomConsumer3。这样可以由三个消费者组成消费者组组名都为“test2”设置分区分配策略为 Sticky。 package com.xz.kafka.consumer;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.StringDeserializer;import java.time.Duration;
import java.util.ArrayList;
import java.util.Properties;public class CustomConsumer1 {public static void main(String[] args) {// 0 配置Properties properties new Properties();// 连接 bootstrap.serversproperties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,192.168.136.27:9092,192.168.136.28:9092,192.168.136.29:9092);// 反序列化properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());// 配置消费者组idproperties.put(ConsumerConfig.GROUP_ID_CONFIG,test2);// 设置分区分配策略properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,org.apache.kafka.clients.consumer.StickyAssignor);// 1 创建一个消费者 , helloKafkaConsumerString, String kafkaConsumer new KafkaConsumer(properties);// 2 订阅主题 sevenTopicArrayListString topics new ArrayList();topics.add(sevenTopic);kafkaConsumer.subscribe(topics);// 3 消费数据while (true){ConsumerRecordsString, String consumerRecords kafkaConsumer.poll(Duration.ofSeconds(1));for (ConsumerRecordString, String consumerRecord : consumerRecords) {System.out.println(consumerRecord);}}}
}3.3、创建生产者 创建CustomProducer生产者。 package com.xz.kafka.producer;import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.serialization.StringSerializer;
import java.util.Properties;public class CustomProducerCallback {public static void main(String[] args) throws InterruptedException {//1、创建 kafka 生产者的配置对象Properties properties new Properties();//2、给 kafka 配置对象添加配置信息bootstrap.serversproperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,192.168.136.27:9092,192.168.136.28:9092,192.168.136.29:9092);//3、指定对应的key和value的序列化类型 key.serializer value.serializerproperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());//4、创建 kafka 生产者对象KafkaProducerString, String kafkaProducer new KafkaProducer(properties);//5、调用 send 方法,发送消息for (int i 0; i 200; i) {kafkaProducer.send(new ProducerRecord(sevenTopic, hello kafka i), new Callback() {Overridepublic void onCompletion(RecordMetadata metadata, Exception exception) {if (exception null){System.out.println(主题 metadata.topic() 分区 metadata.partition());}}});Thread.sleep(2);}// 3 关闭资源kafkaProducer.close();}
}3.4、测试 首先在 IDEA中分别启动消费者1、消费者2和消费者3代码 然后在 IDEA中分别启动生产者代码 在 IDEA 控制台观察消费者1、消费者2和消费者3控制台接收到的数据如下图所示
3.5、Sticky分区分配策略代码案例说明
由上述测试输出结果截图可知 消费者1消费0、2、4分区的数据消费者2消费1、3分区的数据消费者3消费5、6分区的数据。说明Kafka 采用修改后的Sticky分区分配策略。
四、Sticky分区分配再平衡案例
4.1、停止某一个消费者后45s 以内重新发送消息示例 由下图控制台输出可知2号消费者 消费到 2号分区数据。 由下图控制台输出可知3号消费者 消费到 0、4号分区数据。
4.2、停止某一个消费者后45s 以后重新发送消息示例 由下图控制台输出可知2号消费者 消费到 1、2、3号分区数据。 由下图控制台输出可知3号消费者 消费到 0、4、5、6号分区数据。
4.3、Sticky分区分配再平衡案例说明 1 号消费者的任务会按照粘性规则尽可能均衡的随机分成 0 和 1 号分区数据分别由 2号消费者或者 3号消费者消费。 1号消费者挂掉后消费者组需要按照超时时间 45s 来判断它是否退出所以需要等待时间到了 45s 后判断它真的退出就会把任务分配给其他 broker 执行。 消费者 1 已经被踢出消费者组所以重新按照粘性方式分配。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82506.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!