sme*_*eeb 59 messaging message-queue key-value messagebroker apache-kafka
所有的例子的卡夫卡 | 生产者显示ProducerRecord的键/值对不仅是相同的类型(所有示例都显示<String,String>),而是相同的值.例如:
producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));
Run Code Online (Sandbox Code Playgroud)
但是在Kafka文档中,我似乎无法找到解释键/值概念(及其基本目的/效用)的位置.在传统的消息传递(ActiveMQ,RabbitMQ等)中,我总是在特定的主题/队列/交换中发出消息.但Kafka是第一个似乎需要键/值对的代理,而不仅仅是一个正常的'字符串消息.
所以我问:要求生产者发送KV对的目的/用途是什么?
Mat*_*Sax 64
Kafka使用由分区组成的分布式日志的抽象.将日志拆分为分区允许横向扩展系统.
密钥用于确定将消息附加到的日志中的分区.而值是消息的实际有效负载.在这方面,这些例子实际上并不是很"好"; 通常你会有一个复杂的类型作为值(如元组类型或JSON或类似),你将提取一个字段作为键.
请参阅:http://kafka.apache.org/intro#intro_topics和http://kafka.apache.org/intro#intro_producers
通常,键和/或值也可以是null.如果键是null随机分区将被选中.如果值为,null则可以使用特殊的"删除"语义,以防您为主题启用日志压缩而不是日志保留策略(http://kafka.apache.org/documentation#compaction).
小智 23
后期添加...如果您将在一个主题的消费者组中有多个消费者,则指定键以便同一键上的所有消息都转到同一分区对于消息处理的正确排序非常重要。
如果没有键,同一键上的两条消息可能会进入不同的分区,并被组中的不同消费者无序处理。
| 归档时间: |
|
| 查看次数: |
22735 次 |
| 最近记录: |