这是我的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
消息
答案 0 :(得分:1)
我看到实现此类行为的唯一方法是使分区数==可能的密钥数,并使用自定义分区程序来维护分区的密钥唯一性(我认为默认的散列分区程序可行)。但是这个解决方案远非最优,我不推荐它。除此之外,您不能使用任何内置机制来实现类似的行为 - 您必须在客户端过滤消息
答案 1 :(得分:0)
一项建议是记住您特定邮件的partition
和offset
,
在消费者方面使用assign
和seek
,poll
。(同时设置消费者max.poll.records = 1,一次获取一条消息)。
K1
。注意:它的工作方式类似于“随机”搜索,但会降低消息消耗性能 需要0.10个新的消费者和新的配置max.poll.records。