Kafka对实时数据的主要优势是什么?

  • 回答 (6)
  • 关注 (0)
  • 查看 (2853)

在我们的大数据时代,您的IT基础架构可能会受到各种来源数据涌入的影响。最重要的是,客户要求“实时”查看他们的数据,没有任何延迟时间,因此您的服务器需要快速处理和显示数据。Kafka是一个分布式流媒体平台,使公司能够创建实时数据源。Uber,Twitter,Airbnb,Yelp以及今天财富500强公司中超过30%的公司都在使用它。例如,通过集成各种数据,如喜欢,页面点击,搜索,订单,购物车和库存,Kafka可以帮助实时将数据提供给预测分析引擎,以分析客户行为。

那么 Kafka有哪些好处,您的公司为什么要采用它,以及您的IT团队成功实施它需要哪些技能?

uncle_lightuncle_light提问于
帅的惊动我国计算机大神回答于
推荐

Kafka的4个主要优点

随着公司从不同来源(例如网站,用户交互,金融交易)向各种目标系统(例如数据库,分析,电子邮件系统)提供越来越多的数据,开发人员必须为每个系统编写集成。例如,如果您有4个源系统和6个目标系统,那么您的IT团队开发人员必须编写24个集成代码。这是一个繁琐的过程,更不用说,一种缓慢且容易出错的数据传输方式。以下是使用Kafka的四个主要优点。

1. Kafka充当缓冲区,因此您的系统不会崩溃

以前,外部源系统的数据转换通常在晚上分批进行。Kafka通过充当从源系统接收数据的中介,然后实时地将这些数据提供给目标系统来解决这个缓慢的多步骤过程。更重要的是,您的系统不会崩溃,因为 Kafka是它自己独立的一组服务器(称为 Kafka集群)。

2.减少对多个集成的需求

从本质上讲, Kafka减少了对多个集成的需求 - 因为所有数据都通过 Kafka。您可以为每个生产系统和每个消耗系统创建一个与Apache Kafka的集成,而不是您的开发人员编写多个集成以便您可以从不同系统中获取数据。

3.低延迟和高吞吐量

通过解耦数据流, Kafka允许您在需要时使用数据。在不需要缓慢集成的情况下,Kafka将延迟(或每个数据点加载所需的时间)减少到仅仅10毫秒(与其他集成相比减少约10倍或更多)。这意味着您可以快速,实时地提供数据。 Kafka还可以横向扩展到群集中的数百个代理(或服务器)来管理大数据。

有些公司每秒通过Kafka拥有数百万个数据点的高负载。例如,优步使用Kafka实时将汽车位置数据提供给他们的激增定价计算模型。

4.每个人都可以访问数据

由于您的所有数据都集中在 Kafka中,因此任何团队的数据访问都变得更加容易。例如,在过去,您的欺诈团队可能不得不与网络团队互动以获取特定类型的用户数据,因为它们在不同的目标系统上运行。现在,您的欺诈团队将能够通过Kafka直接访问用户数据,以及其他提要,例如财务数据或网站交互。简单吧?

您的IT团队需要的 Kafka技能

一旦了解了好处并决定采用 Kafka,您的IT团队就需要掌握在组织中设置和管理 Kafka的关键技能。以下是您的团队需要的一些关键技能。

如何学习,设置和配置Apache Kafka。Kafka已经构建,开源且免费。所以它更多的是首先获得技能,然后设置 Kafka并为您的系统配置它。我的课程Kafka系列:学习Kafka for Beginners是您的团队开始学习该技术的好地方。我介绍了Kafka生态系统,一些目标架构的外观,以及Kafka的基本概念,如主题,分区,复制,代理,生产者,消费者群体,Zookeeper,交付语义等。我的课程还提供实践练习,因此您的团队可以使用Apache Kafka获得一些实践经验。

一旦你准备好了,我推荐我更高级的课程,教授 Kafka群集设置和管理。此外,我还提供咨询服务,帮助公司设计,设置和配置 Kafka。

Java编程。虽然客户端库存在使用大多数编程语言(Python,Go,Javascript等)与Kafka交互,但Kafka在使用Java虚拟机类型的语言(如Java或Scala)时效果最佳。因此,在编写集成时,您的团队能够使用Java进行编码非常重要。

Kafka Streams和Kafka Connect。如果您想简化集成,您的团队还需要一些Kafka特定技能,如Kafka Streams和Kafka Connect。这些是您的团队需要的更高级的Kafka概念和框架,以便随着时间的推移建立可靠的生产就绪集成。作为顾问,我通常会展示如何构建一个或两个集成,但是您的团队必须为其余的集成进行扩展。

  • Kafka Connect是Apache Kafka与其他数据系统之间可扩展且可靠的流数据工具。您已经可以在以下网址利用为您编写的大量现有连接器:confluent.io/product/connectors/。我的课程Kafka Connect教您实施和利用这些连接器所需的所有技能。
  • Kafka Streams Library用于在Kafka中处理,聚合和转换您的数据。我的课程Kafka Streams for Data Processing 教授如何在Apache Kafka上使用这个数据处理库,通过几个展示各种可能性的例子。
红月努力的程序喵回答于

Kafka的优点

在这里,我们列出了卡夫卡的一些优势。基本上,这些Kafka优势使Kafka成为我们数据湖实施的理想选择。那么,让我们开始详细了解Kafka的优势:

卡夫卡的利弊 - 卡夫卡的优势

A. 高通量

没有那么大的硬件,Kafka能够处理高速和大容量的数据。此外,能够支持每秒数千条消息的消息吞吐量。

B. 低延迟

它能够以毫秒级的极低延迟处理这些消息,这是大多数新用例所要求的。

C. 容错

容错的最大优点之一。Kafka具有固有的功能,可以抵抗群集中的节点/机器故障。

d. 耐久力

这里,耐久性是指磁盘上数据/消息的持久性。此外,消息复制是持久性背后的原因之一,因此消息永远不会丢失。

我们来讨论Apache Kafka架构

G. 可扩展性

通过添加额外的节点不会导致任何停机,Kafka可以按比例缩小。此外,在Kafka集群内部,消息处理完全透明,这些是无缝的。

F. 分散式

Kafka的分布式体系结构使其可以使用复制和分区等功能进行扩展。

G. 消息代理功能

Kafka倾向于很好地替代更传统的消息代理。这里,消息代理指的是中间程序,其将来自发布者的正式消息传递协议的消息转换为接收者的正式消息传递协议。

H. 高并发性

Kafka能够在低延迟条件下以高吞吐量处理每秒数千条消息。此外,它允许以高并发性读取和写入消息。

I. 默认持久

正如我们上面讨论的那样,消息是持久的,这使得它持久且可靠。

J. 消费者友善

可以使用Kafka与各种消费者进行整合。Kafka最好的部分是,根据消费者的不同,它可以表现或采取不同的行为,因为每个客户都有不同的能力处理来自Kafka的这些消息。此外,Kafka可以与各种语言的各种消费者很好地融合。

ķ。批处理能力(类似ETL的功能)

Kafka也可以用于类似批处理的用例,并且还可以执行传统ETL的工作,因为它具有持久消息的能力。

让我们用命令修改Apache Kafka Operations

L. 各种用例

它能够管理Data Lake通常需要的各种用例。例如,日志聚合,Web活动跟踪等。

M, 实时处理

Kafka可以处理实时数据管道。由于我们需要找到一个技术部分来处理来自应用程序的实时消息,因此这是我们选择Kafka的核心原因之一。

想念o默默我有锄头你有墙,我们正配回答于

使用Apache Kafka进行实时事件处理

New Relic是Apache Kafka的早期采用者; 我们很早就认识到,流行的分布式流媒体平台可以成为构建可扩展,高吞吐量,实时流媒体系统的绝佳工具。我们在如何有效地扩展处理负载以获得最大可扩展性方面积累了大量经验。

Events Pipeline团队负责管理New Relic的一些核心数据流 - 特别是  事件数据。这些是监控数据的细粒度块,可记录特定时刻的单个事件。例如,事件可能是应用程序抛出的错误,浏览器上的页面视图或电子商务购物车事务。

在这篇文章中,我们展示了我们如何构建我们的Kafka管道,以便它将微服务拼接在一起,并用作更改日志和“持久缓存”,所有这些都是为了在我们的规模上尽可能平稳有效地处理数据流。在即将发布的帖子中,我们将分享有关如何管理此管道中的主题分区的想法。

本文假设您熟悉Kafka基础知识,包括消费者群体,分区和抵消。所有示例都是使用使用者和生产者API构建的。(请注意,这篇文章不是关于管理或排除Kafka集群的问题。为此,请参阅Kafkapocalypse:监控Kafka而不会失去理智。)

拼接微服务

New Relic运行由40多个敏捷工程团队管理的相当大的微服务组合,这些团队彼此依赖。由于其可扩展性,耐用性和快速性能,我们发现Kafka是在不同服务之间移动数据的好方法。通过主题传递消息的异步性质有助于解耦服务,减少一个服务中的影响变化或问题将对另一个服务产生影响。我们使用它来排队消息,在许多应用程序实例之间并行化工作,以及向所有实例广播消息(我将在后面讨论)。

我们有一系列流处理服务,每个服务都在一个单独的容器中运行,该容器对事件数据进行串行操作。我们通过Kafka主题将这些服务连接在一起; 一个服务在主题上生成消息,以供下一个要使用的服务并用作输入。例如,下图是我们为处理事件数据的持续查询而运行的系统的简化:

批量事件在源主题上流入并被解析为单个事件。然后,它们与系统中的任何现有查询匹配。最后一步将事件聚合到时间窗口中,将查询结果输出到结果主题。请注意,我们使用事件时间  - 处理事件时 - 确定窗口成员资格。

因为将这些服务与Kafka结合在一起可以实现解耦,所以一个服务上的问题不会导致其他服务出现问题。我们还能够根据流量动态部署每个应用程序的更多或更少实例。我们可以让Kafka自动重新平衡负载。

我们将事件驱动的流程(解析和匹配)与基于时间的流程(聚合)分开。事件驱动的流程很容易理解,但是随着几代程序员的学习,时间往往难以处理。这就是我们将棘手的时间逻辑分离到自己的服务中的原因。

使用Kafka作为更改日志

更改日志是主题中包含的数据,旨在从头到尾读取,很可能是在应用程序启动时。目标是通过重播历史来重建州。该服务可以继续监听更新。每个消费者都有自己的(或没有)组并重新启动到earliest偏移量。

所以,回到我们的事件数据查询系统的例子。我们的查询API生成查询主题。每个服务订阅(使用)该查询主题。当服务启动时,它会从earliest偏移量中消耗查询主题,从而读取整个主题并继续以这种方式获取更新。这统一了启动和监听过程,因为消费者和处理程序可以在服务的整个生命周期中以相同的方式运行。

通常,这可以是轮询数据库的有用替代方法。

在这种情况下,您有两个主题保留选项。第一个选项是将主题保留时间设置得足够长,以捕获重建状态所需的所有消息。另一种选择是使用日志压缩。这无限期地保留了每个密钥的最新消息副本。在任何一种情况下,请记住有关该主题的消息数量,以及在启动时重建其状态时,您的服务可以读取整个主题的速度。

在我们的查询API中,向系统注册的所有查询都有一个小时的最长生存时间(TTL)。因此,我们知道所有查询都要保留一小时,手动取消,或者使用查询主题上的新消息进行更新。当我们第一次开发这个系统时,我们慷慨地将主题保留设置为两小时。但是我们发现消耗此主题的应用程序启动速度越来越慢,需要花费几分钟才能完成查询主题,而我们预计这只需要几秒钟。事实证明,我们未能调整日志段大小 - 默认为一周 - 以匹配保留期。为了解决这个问题,我们将其设置segment.ms为匹配retention.ms,并观察我们的主题消费时间。

随着系统的发展,我们正在研究摆脱查询TTL。如果或何时发生这种情况,我们将转向使用日志压缩而不是时间保留。

Kafka作为国家缓存

我们使用Kafka主题来存储和重新加载已创建快照的状态。这就是我所说的,因为缺少一个更好的术语,一个持久的缓存,这意味着使用Kafka主题来存储和重新加载快照状态。

这是它的工作原理。

有状态服务,我们假设也从Kafka主题获取其输入数据,经常将当前状态生成“快照”主题。此“快照”主题在分区中与“主要”消费主题具有1:1匹配。换句话说,如果应用程序实例正在使用并处理来自某个主题的分区2的数据,则该实例将在“快照”主题上生成该状态的快照以进行分区2。一般来说,“快照”主题只需要很短的保留时间,因为生成的数据比消耗的数据多。

当一个实例启动时,它会从“主要”消耗的主题中获取它的分配。然后,它使用静态分区分配从同一分区读取整个快照主题。主题恢复消费的起始偏移量来自快照中保存的元数据。

要从我们的聚合器服务返回示例,该服务会在发布结果之前建立状态最多几分钟。这是一个高吞吐量的实时系统,因此在重新启动服务时在摄取主题中备份几分钟的数据是不可行的。因此,我们开始将快照状态保存到“快照”主题,该主题镜像分区计数中的主要摄取主题。我们还为“快照”主题生成发布消息,以确定何时忽略快照。我们在与快照本身中的数据相关联的摄取主题中保存最新的偏移量,并使用它来确定我们在摄取主题中的起点。

例如,如果我们在每个摄取主题分区中有一个实例,并且在启动时为实例分配了匹配事件主题的分区7,它将读取快照主题的分区7中的所有快照。它将使用快照元数据来确定从匹配事件主题开始读取的起始偏移量,并开始使用匹配事件主题的分区7和处理数据。然后,它将持续保存新快照并将标记发布到快照主题的分区7。结果将发布到结果主题中的相应(和不相关)分区。

有人可能会认为日志压缩在这里很有用。但是,仍然需要手动重复数据删除,因为日志压缩不会立即生效。日志压缩仅在一定时间间隔运行,并且仅在已完成的日志段上运行。因此,为了可靠地重建状态,需要对数据进行重复数据删除以确保仅使用最新的快照。

请注意,我们考虑了其他数据库或缓存选项来存储我们的快照,但我们决定使用Kafka,因为它减少了我们的依赖关系,相对于其他选项而言它不那么复杂,而且速度很快。

流处理和并发

我们发现破坏程序模式,特别是LMAX破坏程序库,对于高吞吐量的Kafka服务来说是非常有用和互补的。

破坏程序类似于异步阻塞队列,由循环数组支持,该数组将对象分发或多播到工作线程。它在吞吐量和延迟方面有一个很好的故事。它预先在缓冲环上分配对象并重用它们,从而节省了垃圾回收。

除了作为获得应用程序并发性的有效机制之外,该策略还具有以下优点:只需要以单线程方式推理每个处理程序。

在我们的所有服务中,我们使用disruptor模式来并行处理来自一个或多个使用的分区的处理数据。我们将并发放在最需要的地方,这对我们来说通常意味着将消息扇出到处理程序线程以进行解压缩和反序列化,以及业务逻辑处理。

我们还使用disruptor处理程序同时更新状态。我们通过破坏者将来自不同主题的消费者混合在一起,以线程安全的方式操纵共享状态。我们在所有应用程序中都这样做,下图描绘了聚合器服务的高级结构。

除了Kafka消息之外,我们还通过破坏程序传递编程生成的控制消息,例如告诉处理程序线程检查聚合完成和发布的计时标记。我们不需要围绕这些不同数据源的额外锁定/同步机制; 处理程序线程一次只能读取任何类型的一条消息。

可伸缩性是一个持续的过程

围绕Kafka建立了许多优秀且引人注目的流媒体系统。随着业务需求的扩展,制定有效传播处理负载的策略是提高可扩展性的重要部分。此外,降低依赖性和复杂性有助于提高代码的可维护性和可靠性。New Relic的活动管道已经走过了漫长的道路,随着我们不断发展,我们不断寻找新的方法来充分利用Kafka。

AcademyCityLv6回答于

实时分析数据并从处理过的数据中获取商业智能洞察已成为当今数据世界的流行趋势。实时数据分析有助于在正确的时间做出有意义的决策。在这篇博文中,我们将探讨Kafka用于开发实时流数据分析的原因。

什么是Kafka?Kafka

让我们看一下Apache Kafka架构,了解Kafka作为消息代理如何帮助实时数据流。

图片来源:Dzone.com

Apache Kafka作为一个集群存储来自一个或多个称为生成器的服务器的消息。数据被分区为称为主题的不同分区。每个主题都被编入索引并存储时间戳。它处理实时和流数据以及Apache Storm,Apache HBase和Apache Spark。Kafka有四个主要的API,即:

  • Producer API - 允许应用程序将数据流发布到一个或多个Kafka主题
  • Consumer API - 允许应用程序订阅一个或多个主题并处理记录流
  • Streams API - 它将输入流转换为输出并生成结果
  • Connector API - 允许构建和运行可重用的生产者或使用者

 使用Kafka的实时流式架构

下图显示了Kafka如何与Spark Streaming集成的简单说明。

生产者,它可以是发布数据的单个Web主机或Web服务器。在Kafka中,数据被划分为主题。生产者将数据发布到主题。消费者或火花流听取主题并可靠地消耗数据。Spark流直接连接到Kafka,处理后的数据存储在MySQL中。Cassandra也可用于存储数据。

企业广泛使用Kafka开发实时数据流水线,因为它可以提取高速高容量数据。这种高速数据通过Kafka的实时管道传递。发布的数据使用任何流平台(如Spark)或使用任何Kafka连接器(如Node Rdkafka,Java Kafka连接器)进行订阅。然后,使用API​​将订阅的数据推送到仪表板。

使用Kafka的优点

  • Kafka可以处理大量数据,是一个高度可靠的系统,容错,可扩展。
  • Kafka是一个分布式发布 - 订阅消息传递系统(Kafka中的发布 - 订阅消息传递系统称为代理),这使得它比其他消息代理(如JMS,RabbitMQ和AMQP)更好。
  • 与JMS,RabbitMQ和AMQP消息代理不同,Kafka可以处理高速实时数据。
  • Kafka是一个高度持久的系统,因为数据是持久的,无法复制
  • Kafka可以处理延迟非常低的消息
风华一代paranoid android回答于

Kafka是一个分布式发布 - 订阅消息传递系统,它是现有解决方案的快速,可扩展且持久的替代方案。

Kafka对于处理实时数据特别有用,例如与管理半卡车车队和工业HVAC单元相关的数据。

像大多数类似的系统一样,  Kafka跟上主题内的消息提要。生产者在主题中创建数据,消费者从这些主题中读取数据。因此,Kafka是分布式的,主题由分区分隔并在各个节点之间复制。这些消息只是简单的字节数组; 开发人员可以利用它们来存储任何他们希望的格式的对象,包括Avro,JSON和String。开发人员还可以选择将密钥附加到消息,以确保具有该特定密钥的所有消息都将到达同一分区。

在从主题消费期间,您还可以配置具有多个消费者的组。特定组中的每个消费者将访问他们订阅的主题内的特定分区子集的消息。这将确保将每条消息传递给组中的一个消费者,并且携带相同密钥的所有消息都将其传递给同一个消费者。

使用Kafka与AMQP或JMS的好处

Kafka旨在  提供  超过AMQP,JMS等三个独特优势

1.Kafka具有高度可扩展性

Kafka是一个分布式系统,能够快速轻松地进行扩展,而不会导致任何停机。

Kafka能够处理许多TB的数据,而不会产生任何开销。

Kafka非常耐用

Kafka将消息保留在磁盘上,这提供了群集内复制。这使得高度持久的消息系统成为可能。

3.Kafka非常可靠

Kafka复制数据并能够支持多个订阅者。此外,它还可以在发生故障时自动平衡消费者。这意味着它比可用的类似消息服务更可靠。

Kafka提供高性能

Kafka为发布和订阅提供高吞吐量,利用能够提供恒定性能水平的磁盘结构,即使在处理许多TB的存储消息时也是如此。

小旭回答于

Kafka能够处理海量数据,具有高度的[Reliable系统,故障 容错可扩展性

*它是一个分布式发布 - 订阅消息传递系统,即与其他消息代理(如JMS,RabbitMQ和AMQP)相比更好的代理。

* 与JMS,RabbitMQ和AMQP消息代理不同,Kafka可以处理高速实时数据。

* Apache Kafka是一个高度持久的系统,因为数据是持久的,无法复制。

* Kafka可以处理延迟非常低的消息。

* 由于集中式数据系统,使得任何团队的数据访问变得更加容易

*减少了对多个集成的需求,即从不同系统收集数据,您只需为每个生产系统和每个消耗系统与Apache Kafka创建一个集成。

扫码关注云+社区

领取腾讯云代金券