在Kafka Java API中,concumerRecord的键和值是什么意思?

时间:2018-11-26 02:51:21

标签: apache-kafka kafka-consumer-api

我现在正在研究Kafka Java API。 在有关消费者的内容中,我经常看到ConsumerRecords。我想确切地知道键和值的含义。我已经阅读了官方文档,但是找不到答案。请分享你的智慧。

1 个答案:

答案 0 :(得分:3)

您可以将Kafka主题中的每个记录视为键值对。默认情况下,该密钥用于将消息路由到该主题的特定分区。让我们举个例子。假设我们有一个主题cars,其中包含4个分区。现在,我们将以下消息(K,V对)推送到该主题。

  1. (轿车,融合)
  2. (越野车,汉兰达)
  3. (卡车,Freightliner)
  4. (自行车,哈雷)

Kafka将为这些消息中的每条消息做的是计算分区的关键模数的哈希值。因此,消息1将转到hashCode(sedan) % 4的分区号cars。消息2将转到分区号。 hashCode(suv) % 4,依此类推。如果您未指定任何密钥,即key为null,则Kafka会根据默认的分区策略(例如循环轮询)为消息分配一个分区。在这种情况下,消息将如下所示:

  1. (空,融合)
  2. (空,高地)
  3. (null,Freightliner)
  4. (null,harley)

现在,消息1、2、3和4将分配给分区号。 0、1、2和3。如果您指定键,并且想用自己的键覆盖默认的分区策略,Kafka也允许您执行此操作。