【问题标题】:Use cases for using Apache Kafka?使用 Apache Kafka 的用例?
【发布时间】:2021-11-25 08:24:58
【问题描述】:

据我了解,Kafka 中的 Consumer 总是轮询该主题。 至少我在这段代码中看到了:

ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));

因此,Kafka 的用例应该与 REST 世界非常不同。在 REST 中,您仅在您真正需要数据时“轮询”。不必要的“轮询”只是无用的网络流量。如果您是报纸出版商,您总是想要最新消息,因此您需要进行民意调查。 Kafka 的好用例。或者您想知道机器是否即将崩溃的物联网,因此您可以定期轮询并询问状态。

所以我真的不明白为什么 Kafka 在微服务中使用得这么多。 假设我们有一个微服务订单和一个微服务计算器。 如果计算器想在 REST 世界中计算上个月的订单,他会调用 get /orders/month/july 例如。 Kafka 在这个例子中会产生什么意义?首先,您不会将订单存储在主题中,而是存储在表格中。 据我了解,Kafka 主题就像“表格”。因此,当您使用 Kafka 时,不涉及其他数据库。对吧?

【问题讨论】:

  • 我搜索了“Apache Kafka 用例”并立即在项目网站上找到了这个:kafka.apache.org/usesmany other pages,这可能比这里的任何答案都更能解释它。
  • 感谢您的链接。但它仍然没有回答我的具体问题。我真的最需要回答我上面的具体问题
  • 问题是您的整个问题都基于错误的前提:您将 Kafka 与 API 调用和数据库进行比较,但 这些不是 Kafka 的用途。这就像在说“我为什么要住在车里而不是房子里?” - 答案是“你不会,但汽车对这些事情很有用”。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

Kafka 和一般的消息传递非常适合微服务,原因有很多,但其中一个原因是微服务之间的通信和解耦。它有助于减轻对容错的需求(在网络、服务等故障时重试),有助于部署模型(蓝/绿等)、扩展等。不过,在其他情况下,您说得很好也许你只是想查询一个数据库。

当然,不同的用例需要不同的最佳架构。一种模式只需要一个消息传递系统,并且任何对数据的请求基本上都采用对正在(重新)播放的消息/事件的请求的形式,以便感兴趣的服务侦听这些消息并从中获取数据.这就是您提到的“卡夫卡就像桌子”的案例。哪个/但是会导致您的下一个问题...

您确实可以,它是一种常见且非常有用的微服务模式,同时拥有数据库和 Kafka(或其他消息传递系统)。例如,事件溯源模式有几种风格,但这本质上需要微服务写入数据库,并将数据更改作为事件发送给其他服务以进行侦听。通过这种方式,其他服务通过我提到的事件接收/查询他们的数据,但数据也在数据库中。我可以就这个话题和例子继续说很多:) 但希望这是你所问的领域。

完全披露,我在 Oracle 工作,并就其中许多主题编写了“使用融合 Oracle 数据库简化微服务”,我们将发布更多内容(2 特别是关于消息传递和 Kafka 以及 Oracle 的下个月的高级队列/事务事件队列)。如果有兴趣,当前的研讨会还将 Kafka 与 Oracle TEQ 进行比较...https://apexapps.oracle.com/pls/apex/dbpm/r/livelabs/workshop-attendee-2?p210_workshop_id=637&p210_type=1

如有任何进一步的问题,请随时提出......

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 2019-10-08
    • 1970-01-01
    • 2021-02-10
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2020-07-11
    相关资源
    最近更新 更多