J.J. Beam Asked: 2024-02-20 21:11:44 +0800 CST2024-02-20 21:11:44 +0800 CST 2024-02-20 21:11:44 +0800 CST 为什么 Kafka 被认为比 REST 更稳定? 772 为什么 Kafka 被认为比 REST 更稳定,REST 响应的概念与 Kafka 中的确认概念不一样吗? rest 2 个回答 Voted Best Answer kopaka 2024-02-21T00:04:45+08:002024-02-21T00:04:45+08:00 原因是 Kafka 独立于任何业务逻辑接受消息。您发送到 Kafka(最终)的数据必须符合特定的架构,这类似于大多数 RESTful 接口的架构验证,但仅此而已。 但是,调用 REST 端点时,请求返回 !=200 代码的原因有很多,因此不成功。这不仅涉及可用性,还涉及无效权限、无效操作、语义错误的请求(试图更改不存在的对象)、节流/速率限制、较长的处理时间以及后端昂贵的处理超时。为了避免数据丢失,所有这些情况都需要通过重试来处理,这可能会导致阻塞行为。 Kafka 有助于将数据传输与执行业务逻辑或持久数据解耦。如果后端处于负载状态,消息传递不会阻塞并产生背压,而是消息将在 Kafka 主题中排队。问题可以独立于生产者来解决,实际处理(或交付到 RESTful 端点)可以由消费者以更受控制的方式进行管理。 这基本上是同步接口与异步接口的区别。 james.bondu 2024-02-21T00:25:26+08:002024-02-21T00:25:26+08:00 Kafka的ack是生产者端配置。当你想向 Kafka 发送数据时,你可以 无确认:数据写入 Kafka,但 Kafka 不返回任何确认。如果 Kafka Broker 宕机,数据可能会丢失,而您却不会知道。 Leader ack:一旦数据写入 Kafka 的 Leader 节点,Kafka 就会发回一个确认。可能没有复制。但数据更安全。 All ack:Kafka 仅在数据写入所有节点后才发回确认。 Kafka的ack不适用于HTTP,它有自己的二进制TCP机制。 然而,REST 响应(我猜你正在谈论 HTTP 状态代码)是传统客户端-服务器架构中返回 ack 的一种方式。这意味着服务器决定如何处理您的请求并发送响应。 在我看来,说Kafka的ack更稳定是不正确的。它的风格与 REST API 不同。
原因是 Kafka 独立于任何业务逻辑接受消息。您发送到 Kafka(最终)的数据必须符合特定的架构,这类似于大多数 RESTful 接口的架构验证,但仅此而已。
但是,调用 REST 端点时,请求返回 !=200 代码的原因有很多,因此不成功。这不仅涉及可用性,还涉及无效权限、无效操作、语义错误的请求(试图更改不存在的对象)、节流/速率限制、较长的处理时间以及后端昂贵的处理超时。为了避免数据丢失,所有这些情况都需要通过重试来处理,这可能会导致阻塞行为。
Kafka 有助于将数据传输与执行业务逻辑或持久数据解耦。如果后端处于负载状态,消息传递不会阻塞并产生背压,而是消息将在 Kafka 主题中排队。问题可以独立于生产者来解决,实际处理(或交付到 RESTful 端点)可以由消费者以更受控制的方式进行管理。
这基本上是同步接口与异步接口的区别。
Kafka的ack是生产者端配置。当你想向 Kafka 发送数据时,你可以
Kafka的ack不适用于HTTP,它有自己的二进制TCP机制。
然而,REST 响应(我猜你正在谈论 HTTP 状态代码)是传统客户端-服务器架构中返回 ack 的一种方式。这意味着服务器决定如何处理您的请求并发送响应。
在我看来,说Kafka的ack更稳定是不正确的。它的风格与 REST API 不同。