当前位置: 首页 > 知识库问答 >
问题:

Kafka基于键/值对的消息传递的目的是什么?[关闭]

云航
2023-03-14

< b >想改进这个问题?通过编辑此帖子更新问题,使其只关注一个问题。

Kafka | producers的所有示例都显示<code>ProducerRecord</code>的键/值对不仅是同一类型(所有示例均显示<code>

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

但是在Kafka文档中,我似乎找不到键/值概念(及其潜在目的/实用程序)的解释。在传统消息传递中(ActiveMQ、RabbitMQ等),我总是在特定主题/队列/交换处触发消息。但是Kafka是第一个似乎需要键/值对而不仅仅是规则字符串消息的代理。

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

共有3个答案

柳绪
2023-03-14

另一个有趣的用例

我们可以使用Kafka主题中的key属性来发送user _ ids,然后可以插入一个消费者来获取流事件(存储在value属性中的事件)。这可以允许您处理用户事件序列的任何最大历史,以便在您的机器学习模型中创建特征。

我还得弄清楚这是否可能。将不断更新我的回答,提供更多细节。

苏麒
2023-03-14

后期添加...指定键以便同一键上的所有消息都转到同一分区对于正确排序消息处理非常重要,前提是在一个主题的使用者组中有多个使用者。

如果没有密钥,同一密钥上的两条消息可能会转到不同的分区,并由组中的不同使用者无序处理。

羊舌自强
2023-03-14

Kafka使用由分区组成的分布式日志的抽象。将一个日志分割成多个分区允许向外扩展系统。

键用于确定日志中消息get附加到的分区。而值是消息的实际有效负载。在这方面,示例实际上不是很好;通常您将使用复杂类型作为值(如元组类型或JSON或类似类型),并且您将提取一个字段作为键。

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

通常,键和/或值也可以是< code>null。如果键为< code>null,将选择一个随机分区。如果值为< code>null,它可以具有特殊的“删除”语义,以防您为主题启用日志压缩而不是日志保留策略(http://Kafka . Apache . org/documentation # compaction)。

 类似资料:
  • 我目前有一个开发环境如下所示。 Spring-Boot 2.x Spring-Kafka 2.5.5 Kafka版本2.5.1 生产者/使用者密钥序列化器/反序列化器=字符串(De)序列化器.类 生产者/使用者值Serializer/Deserializer=Json(De)Serializer.class 当生产者发送Kafka消息时,自定义DTO(或POJO)通过转换为类型。 Producer

  • 我确实有大约一年的编程经验,但主要是在CodeAcademy上,还有各种书籍、youtube视频和维基百科文章。

  • 新服务器密钥是否仅限于消息传递? 说明:在firebase项目设置中,我可以获得“旧”和新服务器密钥(云消息选项卡)。旧版本无法通过发送推送通知https://fcm.googleapis.com/fcm/send 因为响应说它是一个遗留服务器密钥。但在这里,它可以被限制在某些谷歌API中https://console.developers.google.com/apis. 谷歌API控制台中没有

  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

  • 问题内容: 我们最近为推送通知应用程序设置了GCM。服务器api在Node.js中,因此我正在使用节点模块node-gcm将通知推送到gcm服务器。 我们注意到有时数据包没有传递给最终用户。搜索后,我调整了一些设置,这些设置对提高可靠性有很大帮助 我将较旧的设置更改为以下新设置: delayWhileIdle标志从true变为false, 一天中时间而非“演示”的关键 timeToLive改为72

  • 问题内容: 我一点也不了解加密。但是我需要。怎么样? 假设您有一个节点系统,这些节点通过异步消息在网络上相互通信。节点不维护有关其他节点的会话信息(这是设计限制)。 假设您要确保只有您的节点可以读取正在发送的消息。我相信加密是解决方案。 由于节点不维护会话,并且通信必须以无状态,无连接的方式进行,因此我猜想排除了非对称加密。 所以这是我想做的: 消息作为UDP数据报发送 每封邮件都包含一个使邮件有