了解使用者组 ID

2022-09-01 06:06:14

我重新安装了Apache Kafka 0.10.1.0。

我能够在命令提示符下发送/接收消息。

在使用生产者/消费者Java示例时,我无法知道消费者示例 group.id 参数。

让我知道如何解决此问题。

以下是我使用的消费者示例:

public static void main(String[] args) {
             Properties props = new Properties();
             props.put("bootstrap.servers", "localhost:9092");
             props.put("group.id", "my-topic");
             props.put("enable.auto.commit", "true");
             props.put("auto.commit.interval.ms", "1000");
             props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
             props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
             KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
             try {
                 consumer.subscribe(Arrays.asList("my-topic"));

                     ConsumerRecords<String, String> records = consumer.poll(100);
                     System.err.println("records size=>"+records.count());
                     for (ConsumerRecord<String, String> record : records) 
                         System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());



              }
             catch (Exception ex){
                 ex.printStackTrace();
             }
            finally {
                 consumer.close();
            }
        }

运行消费者的命令后,我可以看到生产者发布的消息(在控制台上)。但无法看到来自java程序的消息

bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic my-topic --from-start


答案 1

使用者使用使用者组名称标记自己,发布到主题的每条记录都传递到每个订阅使用者组中的一个使用者实例。使用者实例可以位于单独的进程中,也可以位于不同的计算机上。

如果所有使用者实例都具有相同的使用者组,则记录将在使用者实例上有效地进行负载均衡。

如果所有使用者实例都有不同的使用者组,则每条记录都将广播到所有使用者进程。

group.id 是一个字符串,用于唯一标识此使用者所属的使用者进程组。

(卡夫卡介绍)


答案 2

以下是分区和消费者财产 group.id

 Properties props = new Properties();
  //set all other properties as required
  props.put("group.id", "ConsumerGroup1");
  props.put("max.poll.records", "1");
  KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);

consumer.group id 用于对生成的数据进行负载平衡(如果每个使用者的 group.id 不同,则每个使用者将获得数据的副本)

如果分区 = 1 并且使用者总数计数 = 2,则只有两个活动使用者中的一个将获得数据

如果分区 = 2 并且使用者总数计数 = 2,则两个活动使用者中的每一个都平均获取数据

如果 partition=3 并且使用者总数计数 = 2,则两个活动使用者中的每一个都将获取数据。一个使用者从 2 个分区获取数据,另一个使用者从 1 个分区获取数据。

如果分区 = 3 并且总使用者计数 = 3,则三个活动使用者中的每一个都平均获取数据。


推荐