Apache Kafka 轮询是否比 gRPC 流或 HTTP 轮询更多 "efficient"?
Is Apache Kafka polling more "efficient" than gRPC streams or HTTP polling?
我正在设计一个分布式系统,它在服务器和差异消费者上具有单一的更改源(例如文本文件)。我们需要将更改细粒度地交付给客户端(理想情况下尽可能快地以较小的 traffic/maintenance 成本)。
我正在考虑几个选项:
- HTTP + REST 客户端请求(轮询)
- 阿帕奇卡夫卡
- gRPC 流
- 基于队列的解决方案(例如 RabbitMQ)
- 琐碎git克隆
Apache Kafka 轮询的成本是多少(流量大小)?我如何以 M 毫秒的轮询间隔粗略测量来自 N 个客户端(可能同时是十亿个消费者)的流量?它是否比 gRPC 流(您理解“高效”的方式)更高效?
有更好的解决方案吗?
如果您使用相同的轮询间隔,所有轮询解决方案的流量开销可能会相似。
对于 gRPC 流和一些 JMS 协议,如果没有数据要发送,流量会非常低,但总会有心跳包。
但是你应该检查客户端数量的限制。如果你谈论数百万消费者,你不希望他们一直有一个打开的 TCP/IP 套接字,因为那会杀死你的 OS.
如果您 运行 使用 kafka,在打开的 TCP/IP 套接字之上,您还将在服务器上保留每个消费者的偏移量。如果文本文件有 1000 条更新,则实际的 kafka 主题中只有 1000 条消息,但是 __consumer_offsets
内部主题将有数百万条条目,每个消费者一条。
对于非常大的规模(如物联网),他们建议将其与 MQTT 结合使用:https://www.confluent.io/blog/iot-streaming-use-cases-with-kafka-mqtt-confluent-and-waterstream/。在那篇博客中,他们提到 Kafka 不是为数万个连接而构建的。
使用 GIT 似乎更适合我,虽然我不确定它能缓存东西的效果如何 in-memory server-side.
使用自定义 HTTP 轮询客户端似乎是最简单的解决方案,并且可能有使用 Etag header 或类似内容的解决方案。参见 https://en.wikipedia.org/wiki/HTTP_ETag
我认为轮询在这里不是一个有效的解决方案。听起来您想查看 Zookeeper 或 Consul KV Store,它们允许您向观察者广播更改并在所述实体发生更改时对其创建锁定
如果您确实想使用 Git,或者这些选项请查看中心法则 - https://line.github.io/centraldogma/
我正在设计一个分布式系统,它在服务器和差异消费者上具有单一的更改源(例如文本文件)。我们需要将更改细粒度地交付给客户端(理想情况下尽可能快地以较小的 traffic/maintenance 成本)。
我正在考虑几个选项:
- HTTP + REST 客户端请求(轮询)
- 阿帕奇卡夫卡
- gRPC 流
- 基于队列的解决方案(例如 RabbitMQ)
- 琐碎git克隆
Apache Kafka 轮询的成本是多少(流量大小)?我如何以 M 毫秒的轮询间隔粗略测量来自 N 个客户端(可能同时是十亿个消费者)的流量?它是否比 gRPC 流(您理解“高效”的方式)更高效?
有更好的解决方案吗?
如果您使用相同的轮询间隔,所有轮询解决方案的流量开销可能会相似。
对于 gRPC 流和一些 JMS 协议,如果没有数据要发送,流量会非常低,但总会有心跳包。
但是你应该检查客户端数量的限制。如果你谈论数百万消费者,你不希望他们一直有一个打开的 TCP/IP 套接字,因为那会杀死你的 OS.
如果您 运行 使用 kafka,在打开的 TCP/IP 套接字之上,您还将在服务器上保留每个消费者的偏移量。如果文本文件有 1000 条更新,则实际的 kafka 主题中只有 1000 条消息,但是 __consumer_offsets
内部主题将有数百万条条目,每个消费者一条。
对于非常大的规模(如物联网),他们建议将其与 MQTT 结合使用:https://www.confluent.io/blog/iot-streaming-use-cases-with-kafka-mqtt-confluent-and-waterstream/。在那篇博客中,他们提到 Kafka 不是为数万个连接而构建的。
使用 GIT 似乎更适合我,虽然我不确定它能缓存东西的效果如何 in-memory server-side.
使用自定义 HTTP 轮询客户端似乎是最简单的解决方案,并且可能有使用 Etag header 或类似内容的解决方案。参见 https://en.wikipedia.org/wiki/HTTP_ETag
我认为轮询在这里不是一个有效的解决方案。听起来您想查看 Zookeeper 或 Consul KV Store,它们允许您向观察者广播更改并在所述实体发生更改时对其创建锁定
如果您确实想使用 Git,或者这些选项请查看中心法则 - https://line.github.io/centraldogma/