消费者。如何指定要读取的分区? [卡夫卡]

Posted

技术标签:

【中文标题】消费者。如何指定要读取的分区? [卡夫卡]【英文标题】:consumer.How to specify partition to read? [kafka] 【发布时间】:2018-03-11 14:06:54 【问题描述】:

我正在介绍kafka,我想知道当我使用来自主题的消息时如何指定分区。

我找到了几张这样的图片:

这意味着1个消费者可以消费来自多个分区的消息,但1个分区可以被单个消费者(在消费者组内)读取

我还阅读了几个针对消费者的示例,看起来像这样:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "consumer-tutorial");
props.put("key.deserializer", StringDeserializer.class.getName());
props.put("value.deserializer", StringDeserializer.class.getName());
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); 

和:

1.订阅:

consumer.subscribe(Arrays.asList(“foo”, “bar”)); 

2。民意调查

 try 
      while (running) 
        ConsumerRecords<String, String> records = consumer.poll(1000);
        for (ConsumerRecord<String, String> record : records)
          System.out.println(record.offset() + ": " + record.value());
      
     finally 
      consumer.close();
    

这是如何工作的?我将从哪个分区读取消息?

【问题讨论】:

【参考方案1】:

有两种方法可以告诉你想要消费什么主题/分区:KafkaConsumer#assign()(你指定你想要的分区和你开始的偏移量)和subscribe(你加入一个消费者组,和分区/偏移量将由组协调器根据同一消费者组中的消费者动态分配,并且可能在运行时发生变化)

在这两种情况下,你都需要poll来接收数据。

见https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html,尤其是Consumer Groups and Topic SubscriptionsManual Partition Assignment的段落

【讨论】:

你指定你想要的分区和你开始的偏移量我在哪里指定偏移量? public void seek(TopicPartition partition, long offset)

以上是关于消费者。如何指定要读取的分区? [卡夫卡]的主要内容,如果未能解决你的问题,请参考以下文章

卡夫卡:如何在卡夫卡实现循环分区

卡夫卡多个生产者写同一主题?

kafka 分区和副本以及kafaka 执行流程,以及消息的高可用

卡夫卡流与卡夫卡消费者如何决定使用啥

如何暂停卡夫卡消费者?

Kafka Consumer Lag Monitoring