InfluxDB 和 Kafka:公司如何整合两者
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2019年8月14日
导航到
随着 Kafka 和时间序列数据库的普及,了解它们如何结合以提供强大的实时数据处理解决方案变得越来越有价值。俗话说,整体大于部分之和。
本系列博客的第一部分包括
- Kafka 介绍
- 一些基本的 Kafka 概念
- 公司如何将 Kafka 与 InfluxDB 整合以创建容错、可扩展、快速且简单化的数据流
什么是 Kafka?
根据维基百科,“Apache Kafka 是一个用 Scala 和 Java 编写的开源流处理软件平台。该项目旨在提供统一、高吞吐量、低延迟的平台,用于处理实时数据流。”换句话说,它允许您构建复杂的数据管道。Kafka 就像是三种技术的结合
- 消息队列——它读取和写入数据流。
- 消息代理——它处理消息并对它们应用不同的逻辑以实时响应事件。
- 数据存储——发布和消费消息的解耦意味着 Kafka 存储这些在途消息。
现在让我们谈谈一些热门词汇。根据Kafka,以下是它的独特之处:
水平可扩展
共享消息队列和传统的发布-订阅模型早于Kafka。在共享消息队列中,所有消息都落入同一个逻辑域。这意味着它们都执行相同的功能——处理不可扩展。
在传统的发布-订阅模型中,消息被分配到不同的主题,这些主题执行不同的功能。然而,每条消息都被发布到每个主题,每个订阅者都必须订阅每个主题。随着网络的扩展,流的复杂性呈指数增长。由此产生的不稳定性限制了传统发布-订阅模型的可扩展性。
换句话说,Kafka可以扩展处理,并且是多订阅者,使其真正可扩展。想了解更多关于共享消息队列和传统发布-订阅模型之间的区别,我强烈推荐阅读这篇文章。查看文档了解更多关于Kafka如何区别于其前辈的信息。
容错性
这一点很简单。因为Kafka是水平可扩展的,并且设计为集群运行,所以如果一个节点宕机,你不会丢失消息或处理协议。
非常快
简短的答案可能会把Kafka的速度归因于它用Scala和Java编写,是开源的,并由一群非常聪明的人贡献。更好的答案会涉及到3个要点
Kafka的基础
- 主题 - 消息的类别。它们是多订阅者,可以有多个消费者。每个主题都有一个分区的日志。一个主题看起来是这样的:
- 生产者 - 将数据发布到适当的主题。
- 消费者 - 订阅主题的应用程序。消费者实例可以位于不同的进程或机器上,以确保高可用性。
- 消费者组 - 包含2个或多个消费者实例。消息在消费者组中的消费者实例之间进行负载均衡。
- 代理 - 负责从生产者那里获取数据并发送到消费者。
- 分区 - 有序的、不可变的、追加日志。记录被分配一个偏移量值,以标识其在分区中的位置。分区在Kafka集群中分布式和复制。虽然每个主题分区必须适合服务器,但它们使主题可以扩展到单个服务器之外。具有最高偏移量的分区所在的代理是领导者。其余的代理是追随者。领导者处理分区的读写请求。其他代理复制领导者。如果领导者变得不可用,会选择一个追随者来取代失败领导者的位置。
- 并行性 - 并行性是多个过程的并发执行。每个分区由消费者组中的一个消费者精确消费。然而,消费者可以并行消费记录。如果一个消费者停止,Kafka可以将分区分散到消费者组中的其他消费者。这样,分区是并行性的单元。
- 订单处理 – 由于每个分区恰好由消费者组中的一个消费者读取和消费,Kafka能够保证顺序。这与传统队列形成对比,在传统队列中,多个消费者从同一个队列中读取和消费,记录的顺序可能会丢失。我建议阅读这篇文章以了解更多关于Kafka中的并行性和顺序的信息。
- 处理 – Stream API使得实时处理数据流成为可能。利用它,你可以执行聚合或连接数据流。
Hulu和Wayfair如何一起使用InfluxDB和Kafka
Hulu使用Kafka和InfluxDB将复杂的Celtic Knot数据流简化为稳定、快速和持久的数据流,并解决了传统发布-订阅模型带来的问题。Hulu使用Kafka和InfluxDB将扩展到每秒超过1百万个指标。在这个新设计中,他们能够应对任何有问题的InfluxDB集群。如果集群离线,Kafka会将写入重定向到另一个InfluxDB集群,直到集群恢复,确保一致性。他们还能够轻松地关闭大量基础设施,并将工作量路由到另一个数据中心,而不会影响用户。
Wayfair使用Kafka作为消息队列来处理应用指标。在其架构中,Kafka被Telegraf代理夹在中间。一个输出Kafka Telegraf代理将应用指标从其应用程序发送到Kafka,然后Kafka-Consumer Telegraf代理从Kafka收集这些指标并发送到InfluxDB。这种模式使得Wayfair能够连接到多个数据中心,临时注入处理钩子,并对严重中断具有多天的容忍度。
了解更多关于Kafka和InfluxDB的信息
Kafka使公司能够构建实时、可扩展和容错的数据管道。Hulu使用InfluxDB和Kafka来解决其高吞吐量指标摄取需求。如果你是Kafka的新手,这篇文章激发了你尝试它的兴趣,请查看使用Docker部署Confluent Platform (Kafka) OSS和这个Kafka-Docker存储库。如果您有任何问题,请在我们社区网站或Slack频道上发布。