如何更好地设计由 kafka 消费消息触发的异步工作流?

问题描述 投票:0回答:1

据我了解,我们可以使用 kafka 消息并根据消息信息触发异步工作流。这是一个例子:

private consumer() {
    request_info = kafka.getNextMessage()
    trigger_async_workflow(request_info)
}

我们将继续一次消费和触发下游工作流:

while () {
   consumer()
}

但是这里的问题是我们永远不知道

trigger_async_workflow()
需要多长时间才能完成,所以如果由于任何依赖性中断而需要相当长的时间,每个消费者都会变慢,那么我们就会遭受卡夫卡消费者滞后。

此外,如果

trigger_async_workflow()
失败,一种方法是向另一个延迟主题生成消息,然后推回重试。

那么基本上如何最大限度地减少异步工作流不可预测性带来的潜在消费者滞后?还有其他更好的设计或技巧吗?谢谢

asynchronous apache-kafka kafka-consumer-api
1个回答
0
投票

欢迎来到并发世界我的朋友。编程中最具挑战性的主题之一。在数据库世界中,有隔离级别(通常为 4)和显式锁定。在 JavaScript 世界中,有一些处理异步代码的选项:

  1. 回调,它允许您提供在异步方法完成运行后调用的函数
  2. promises,允许您将方法链接在一起;
  3. async/await 关键字,它们只是 promises 的一些语法糖。

你应该研究回调。本质上,您需要识别依赖事件/函数和依赖事件/函数。考虑这些的另一种方法是子函数和父函数。另一种方法是将它们视为下游功能和上游功能。然后你只需在完成时放置一个回调。这是锁定函数直到它可以安全运行的 JavaScript 方式。

这对性能有好处吗?很多时候不是。然后发挥创意。

JavaScript 回调是一个将在之后执行的函数 另一个函数已完成执行。更正式的定义 将是 - 作为参数传递给另一个函数的任何函数 函数,以便它可以在调用其他函数时执行 作为回调函数。

© www.soinside.com 2019 - 2024. All rights reserved.