RabbitMQ或Kafka是否适合实时仪表板应用程序?

时间:2018-01-23 20:06:22

标签: rabbitmq apache-kafka streaming

我们正面临一个关键决策,我们需要为实时遥测处理和监控系统选择合适的工具。

该系统有两个主要目的:

  1. 在仪表板UI应用程序中显示实时遥测数据(高刷新率)
  2. 处理来自多个来源的大量数据
  3. 我们有两个问题:

    • 在我们的使用案例中,大多数数据消费者将是网络客户端,与我们迄今为止发现的相反 - > RabbitMQKafka主要用于基于云的平台,其中大多数数据使用者是服务而非客户。

    • 通常来自Kafka或RabbitMQ的数据使用者负载均衡,并且不会为每个客户端复制消息。

    1. Kafka或RabbitMQ是否适合为每个客户复制数据的环境?
    2. 这种工具是否适合处理大量客户端,同时为每个客户端复制邮件?
    3. 这种工作有更好的工具吗?
    4. 谢谢:)

3 个答案:

答案 0 :(得分:1)

  1. Kafka对主题进行了分区,因此每个使用者组都会独立使用消息。 RabbitMQ有一个名为fanout的交换类型,用于向交换机上的所有队列传递消息,因此可以用于类似的purporse。

  2. 如果您拥有大量客户端(数百或数千),我将不会使用RabbitMQ扇出交换。 Kafka可以水平扩展,可以处理相当多的分区。出于延迟目的,通常建议您遵循不超过100 x b x r的规则,其中b是Kafka群集中的代理数量,r是复制因子。

  3. 还有其他专为大批量事件处理而设计的系统。你看过Event Store,还是基于云,Azure Event Hub

答案 1 :(得分:1)

老实说,我也会考虑像splunk或ELK Stack(Elasticsearch和家族)这样的专用解决方案。

但恕我直言Kafka将以软实时模式完成工作(由于轮询,存在一些延迟)。

回答: 是的 是的。 这取决于。我正在使用像YAMI4一样的p2p消息。这个不使用轮询,所以当需要低延迟时它很好,但是YAMI4没有实现持久性。

答案 2 :(得分:0)

在您的技术选择中还要考虑的是Kafka还包括Kafka Streams API,它允许您在应用程序中进行流处理。它还包括一个可查询的statestore,可用于驱动仪表板。

Kafka的消费者可以选择接收所有消息,包括各种本机客户端库(Java,C / C ++,python,Go等),以及用于从Kafka发送/接收数据的REST代理。