充分利用kafka-node
Get the best out of kafka-node
我需要关于适合我的项目的正确 Kafka 结构的建议以及原因。
我的项目
我正在创建一个投资机器人管理平台。非常高级别 - 您可以编写多个投资策略,并将它们上传到平台,它们将实时执行,提供有关性能的分析和实时信息。这些策略从 4 个数据流中获取信息。当策略读取 4 个不同的 Kafka 主题时,这些数据将传递给策略。这个 kafka 主题直接从 exchanges websocket 接收信息。在任何给定时间,平台中的机器人数量都是动态的。
我所做的如下:
使用图像 Kafka-wurmeister 和 zookeper 来初始化 kafka
预先初始化我需要的所有 Kakfka 主题。
我通过生成主题的所有信息将所需数据推送到 Kafka:
payloads = [
{ topic: topic, messages: JSON.stringify(message), partition: 0 }
]
await producer.send(payloads, async function (err, data) {
})
然后我通过一个简单的消费者从主题中读取策略,如下所示:
consumer = new Consumer(client, [{ topic: topic, partition: 0 }]);
consumer.on('message', 函数(消息){
// Parse the value consumed from kafka
parsedPrice = JSON.parse(message.value)
})
objective 是讨论我如何使用 kafka 来确保我可以,首先访问来自几个不同消费者的主题,其次有足够的冗余来确保我有很高的正常运行时间。
如果你想从多个消费者访问一个主题,你可以建立一个消费者组,一个或多个消费者在其中共同消费一个主题。
在一个消费者组中,每个消费者只消费一个特定的分区。例如,如果您有 4 个分区,则可以使用 4 个消费者,以便 1 个分区映射到 1 个消费者(或者您可以有 2 个消费者,每个消费者使用 2 个分区)。在这种情况下,每个消费者只消费 一些 消息,而不是全部 消息。这允许消费者进行扩展,以便他们可以使用大量消息来消费主题,如果一个消费者失败,组中的其他消费者将重新平衡分区以接管失败的消费者。
如果您希望每个消费者都消费所有消息,您可以将这些消费者放在不同的消费者组中——它的工作方式与上面的一样,但消费者正在消费整个主题。
为了使 Kafka 具有高可用性,您可以有一个故障转移消费者。这个消费者将处于空闲状态,并且只有在原始消费者失败时才会开始消费消息。
这个link解释得更详细一点:https://www.oreilly.com/library/view/kafka-the-definitive/9781491936153/ch04.html
希望对您有所帮助!
我需要关于适合我的项目的正确 Kafka 结构的建议以及原因。
我的项目 我正在创建一个投资机器人管理平台。非常高级别 - 您可以编写多个投资策略,并将它们上传到平台,它们将实时执行,提供有关性能的分析和实时信息。这些策略从 4 个数据流中获取信息。当策略读取 4 个不同的 Kafka 主题时,这些数据将传递给策略。这个 kafka 主题直接从 exchanges websocket 接收信息。在任何给定时间,平台中的机器人数量都是动态的。
我所做的如下: 使用图像 Kafka-wurmeister 和 zookeper 来初始化 kafka 预先初始化我需要的所有 Kakfka 主题。 我通过生成主题的所有信息将所需数据推送到 Kafka:
payloads = [
{ topic: topic, messages: JSON.stringify(message), partition: 0 }
]
await producer.send(payloads, async function (err, data) {
})
然后我通过一个简单的消费者从主题中读取策略,如下所示: consumer = new Consumer(client, [{ topic: topic, partition: 0 }]); consumer.on('message', 函数(消息){
// Parse the value consumed from kafka
parsedPrice = JSON.parse(message.value)
})
objective 是讨论我如何使用 kafka 来确保我可以,首先访问来自几个不同消费者的主题,其次有足够的冗余来确保我有很高的正常运行时间。
如果你想从多个消费者访问一个主题,你可以建立一个消费者组,一个或多个消费者在其中共同消费一个主题。
在一个消费者组中,每个消费者只消费一个特定的分区。例如,如果您有 4 个分区,则可以使用 4 个消费者,以便 1 个分区映射到 1 个消费者(或者您可以有 2 个消费者,每个消费者使用 2 个分区)。在这种情况下,每个消费者只消费 一些 消息,而不是全部 消息。这允许消费者进行扩展,以便他们可以使用大量消息来消费主题,如果一个消费者失败,组中的其他消费者将重新平衡分区以接管失败的消费者。
如果您希望每个消费者都消费所有消息,您可以将这些消费者放在不同的消费者组中——它的工作方式与上面的一样,但消费者正在消费整个主题。 为了使 Kafka 具有高可用性,您可以有一个故障转移消费者。这个消费者将处于空闲状态,并且只有在原始消费者失败时才会开始消费消息。
这个link解释得更详细一点:https://www.oreilly.com/library/view/kafka-the-definitive/9781491936153/ch04.html
希望对您有所帮助!