【问题标题】:What is a data stream in Kafka?Kafka 中的数据流是什么?
【发布时间】:2021-05-02 00:33:29
【问题描述】:

你为什么用 Kafka 来谈论数据流。

而就 REST API 而言,我从未听说过像数据流这样的东西。

也许有人可以告诉我数据流在 Kafka 中的真正含义。 顺便说一句,我知道 Kafka 中有一个生产者和一个消费者。生产者 将数据发送给代理,代理将其发送给消费者。

【问题讨论】:

  • 您问的是 topics 还是 Kafka Streams 客户端 API?我不认为“数据流”是官方文档中使用的术语。经纪人也不会“推动”发送数据,消费者请求并轮询它

标签: apache-kafka


【解决方案1】:

Kafka 中的数据流意味着无穷无尽的数据集合。

例如,如果您想返回昨天的所有推特消息, 那么它是一个具有一定(虽然非常大)数量的集合。

但是如果你想返回自 2021 年 1 月 1 日以来的所有推特消息,那么它就是源源不断的数据流(因为你没有指定期末)。

如果您创建 Kafka Consumer 并订阅所有 Twitter 消息 自 2021 年 1 月 1 日起,您将源源不断,这将 不断返回新数据。

您还可以谈论反应式 REST API 中的无尽数据流,为什么不呢? 如果您的 Kafka Consumer 会将所有 twitter 消息放在 MongoDB 中,例如,这是一个响应式数据库,那么您可以创建到您的响应式 REST 端点的 Web Socket 连接,这将不断地将新的 twitter 消息从 MongoDB 推送到您的 UI。

除了MongoDB你也可以直接使用Kafka,但是你将无法长时间存储大量数据(取决于你的Kafka集群配置)。

不幸的是,大多数关系数据库,如 MySQL 或 PostgreSQL,还不是响应式的,因此您必须构建轮询解决方法来启用类似响应式的无限数据流。

【讨论】:

  • MySQL 或 PostgreSQL 还没有响应式 - 读取二进制日志,就像使用 Debezium 一样,它们可以是
  • Kafka 是否使用 HTTP 嵌入消息?然后又用 TCP 传输哪个??
  • @Haily Kafka 使用基于 TCP 的二进制协议。您可以在本文中找到更多信息:kafka.apache.org/protocol.html。 HTTP 也使用 TCP,但主要区别在于 HTTP 是同步的。如果您发送请求,则必须等待响应。像 Kafka 这样的消息系统是异步的:您将消息发送到 Kafka 代理而不等待响应,这会提高性能,但会使您的系统更加复杂。根据您的情况,您应该自己决定:您应该使用异步交互还是同步交互。
  • @Haily 另外,如果你想将消息加载到 Web UI,你必须使用 HTTP,包裹在 Kafka 或数据库上。这里的主要区别是您应该使用 Reactive 还是 Blocking HTTP。使用阻塞 HTTP,后端的所有交互都发生在一个线程中,这可能会影响性能,因为对于每个 IO 操作(从数据库中检索文件或数据),您的线程不做任何事情,只是等待。响应式 HTTP 通过管理线程和结合 web-sockets 来提高性能,将新数据“推送”到你的 UI。并非所有 HTTP 服务器都支持响应式 HTTP,但例如,Netty 是响应式的。
  • 好的,谢谢。你能简短地描述一下什么是“二进制协议”吗?我只是看了你的链接,但我没有时间花很多时间来阅读它:)
猜你喜欢
  • 1970-01-01
  • 2016-09-25
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多