我们可以使用密钥从Kafka获得价值吗?我们如何在Kafka Message中传递标题?

时间:2019-09-22 18:58:29

标签: apache-kafka

  1. 我刚刚开始探索Kafka,我无法理解kafka中键值的需求,因为我们还可以像JMS这样直接以单个字符串形式发送消息。通过指定键是否可以从记录中获取值? (我正在将其与JMS中的选择器进行比较,因此,基于此我们可以过滤消息)。
  2. 我们如何传递带有消息的标头?可以只发送带有标头而不是键值对的消息吗?

2 个答案:

答案 0 :(得分:2)

该键是可选的,默认情况下,确定主题中消息到达的分区。

不可能从主题中选择键-您必须计算它的分区,然后扫描主题分区的所有消息。可以在Kafka Streams API中创建一个Ktable来创建一种类型的KV存储,尽管您可以通过“交互式查询”从中选择)

Java API具有生产者发送方法,该方法允许您传递标头。您需要将键和值设置为null才能仅发送标头。我对标题的其他客户端支持还不够熟悉


标头可用于发送额外的元数据,例如客户端版本号或在zipkin等服务中使用的跟踪。此数据位于您要作为键/值有效负载的一部分发送的业务上下文之外。而且我不知道能够在控制台上发送标头

答案 1 :(得分:0)

  

kafka中关键值需要什么

一个键确定生成消息的分区。

每条消息都必须具有一个可以直接指定的键(在使用Kafka Producer API创建ProducerRecord时),或者通过Partitioner间接指定的键,该键“为给定记录计算分区。”

Kafka Producer API使我们DefaultPartitioner使用32位murmur2散列来计算记录的分区(已定义键)或以循环方式选择一个分区(根据可用的分区)主题)。

  

因为我们还可以像JMS这样直接以单个字符串形式发送消息。

使用自定义Partitioner可以实现。默认情况下不是这样。