【问题标题】:Get the best out of kafka-node充分利用 kafka-node
【发布时间】:2020-05-13 01:53:07
【问题描述】:

我需要建议我的项目使用哪些正确的 Kafka 结构以及原因。

我的项目 我正在为投资机器人管理创建一个平台。非常高级 - 您可以编写多个投资策略,并将它们上传到平台,它们将实时执行,提供分析和实时绩效信息。这些策略从 4 个数据流中获取信息。当策略从 4 个不同的 Kafka 主题中读取数据时,这些数据会被传递给策略。这个 kafka 主题直接从交易所 websocket 接收信息。在任何给定时间,平台中都有动态数量的机器人。

我所做的如下: 使用镜像 Kafka-wurmeister 和 zookeper 初始化 kafka 预先初始化我需要的所有 Kakfka 主题。 我通过以下方式将所有信息生成到主题中,将所需数据推送到 Kafka:

payloads = [
    { topic: topic, messages: JSON.stringify(message), partition: 0 }
]
await producer.send(payloads, async function (err, data) {
})

然后我通过一个简单的消费者从主题中读取策略,如下所示: 消费者=新消费者(客户端,[{主题:主题,分区:0}]); consumer.on('message', function (message) {

    // Parse the value consumed from kafka 
    parsedPrice = JSON.parse(message.value)
 })

目的是讨论如何使用 kafka 来确保我可以,首先访问来自多个不同消费者的主题,其次有足够的冗余以确保我有非常长的正常运行时间。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api


    【解决方案1】:

    如果您想从多个消费者访问一个主题,您可以建立一个消费者组,一个或多个消费者一起工作以消费一个主题。

    在一个消费者组中,每个消费者只消费一个特定的分区。例如,如果您有 4 个分区,则可以使用 4 个消费者,以便将 1 个分区映射到 1 个消费者(或者您可以让 2 个消费者每个消费 2 个分区)。在这种情况下,每个消费者只消费部分消息,不是全部消息。这允许消费者进行扩展,以便他们可以使用具有大量消息的主题,如果一个消费者失败,组中的其他消费者将重新平衡分区以接管失败的消费者。

    如果您希望每个消费者消费所有消息,您可以将这些消费者放在不同的消费者组中——它的工作原理与上述相同,但消费者正在消费整个主题。 为了使 Kafka 具有高可用性,您可以拥有一个故障转移使用者。该消费者将处于空闲状态,并且仅在原始消费者失败时才开始消费消息。

    这个链接解释得更详细一点:https://www.oreilly.com/library/view/kafka-the-definitive/9781491936153/ch04.html

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 2019-03-03
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多