仅消耗特定的分区消息

时间:2016-07-29 15:55:41

标签: apache-kafka

这是我的kafka消息制作人:

DatabaseError

这是我的消费者

        ProducerRecord producerRecord = new ProducerRecord(topic,  "k1", message);
        producer.send(producerRecord);

如何仅使用 TopicPartition partition0 = new TopicPartition(topic, 0); consumer.assign(Arrays.asList(partition0)); final int minBatchSize = 200; List<ConsumerRecord<String, byte[]>> buffer = new ArrayList<>(); while (true) { ConsumerRecords<String, byte[]> records = consumer.poll(100); for (ConsumerRecord<String, byte[]> record : records) { buffer.add(record); System.out.println(record.key() + "KEY: " + record.value()); 作为分区键的topic消息

2 个答案:

答案 0 :(得分:1)

我看到实现此类行为的唯一方法是使分区数==可能的密钥数,并使用自定义分区程序来维护分区的密钥唯一性(我认为默认的散列分区程序可行)。但是这个解决方案远非最优,我不推荐它。除此之外,您不能使用任何内置机制来实现类似的行为 - 您必须在客户端过滤消息

答案 1 :(得分:0)

一项建议是记住您特定邮件的partitionoffset, 在消费者方面使用assignseekpoll。(同时设置消费者max.poll.records = 1,一次获取一条消息)。

  • 分配,为消费者分配特定分区;
  • 寻求,寻求特定的偏移量,然后下一次民意调查将获得您预期的消息K1

注意:它的工作方式类似于“随机”搜索,但会降低消息消耗性能 需要0.10个新的消费者和新的配置max.poll.records。