24

全部examplesKafka | producers显示ProducerRecord的键/值对不仅为相同类型(所有示例均显示<String,String>),但值为。例如:卡夫卡的基于关键/值对的消息传递的目的是什么?

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i))); 

但在卡夫卡的文档,我似乎无法找到,其中键/值概念(其根本目的/实用程序)进行说明。在传统的消息传递中(ActiveMQ,RabbitMQ等),我总是在特定的主题/队列/交换中解雇消息。但卡夫卡是第一个似乎需要键/值对的经纪人,而不是只是一个正规的'ole字符串消息。

所以我问:要求生产者发送KV对的目的/用途是什么?

回答

26

卡夫卡采用分布式日志是由分区的抽象。将日志分成分区允许扩展系统。

用于确定邮件附加到的日志内的分区。值是消息的实际有效负载。这方面的例子实际上并不是很好,通常你会有一个复杂的类型作为值(如元组类型或JSON或类似),你会提取一个字段作为关键。

参见:http://kafka.apache.org/intro#intro_topicshttp://kafka.apache.org/intro#intro_producers

通常,键和/或值可以是null,太。如果密钥是null将选择一个随机分区。如果值为null那么可以在启用日志压缩而不是主题的日志保留策略(http://kafka.apache.org/documentation#compaction)的情况下具有特殊的“删除”语义。

+1

值得注意的是,关键字在Kafka的流式API中也扮演着相关的角色,具有'KStream'和'KTable' - 见[here](http://docs.confluent.io/current/streams/developer-guide html的#流显影剂导-DSL)。 – reim

+1

Keys ***可以用来确定分区,但它只是生产者的默认策略。最终,它是***生产者***谁选择使用哪个分区。 – gvo

相关问题