使用Akka、Kafka和ElasticSearch等构建分析引擎

本文分享了使用Scala、Akka、Play、Kafka和ElasticSearch构建分布式、容错、可扩展的分析引擎的经验。文中详细介绍了三代架构的演进,从最初的Play、Akka集群到后来引入Kafka解决延迟和资源利用率问题,最终形成基于拉取模式的稳定架构。该架构借助Kafka实现流处理,利用ElasticSearch进行查询和存储,确保系统的高可用性和成本效益。
摘要由CSDN通过智能技术生成

在这篇文章里,我将和大家分享一下我用Scala、Akka、Play、Kafka和ElasticSearch等构建大型分布式、容错、可扩展的分析引擎的经验。

我的分析引擎主要是用于文本分析的。输入有结构化的、非结构化的和半结构化的数据,我们会用分析引擎对数据进行大量处理。如下图所示为第一代架构,分析引擎可以用REST客户端或Web客户端(引擎内置)访问。

简单描述一下用到的技术:

Play框架做REST服务器和WEB应用。Play是个基于轻量级、无状态和WEB友好的MVC框架。

Akka集群作处理引擎。Akka是个工具集,用于在JVM上简化编写高并发、分布式、和有弹性的消息驱动应用。

ClusterClient用于与Akka集群通信。它运行在REST服务器上,将任务发给Akka集群。使用ClusterClient是一个非常错误的决定,因为它并不会维持与Akka集群的长连接,因而会经常报连接错误,而且重新建立连接时还要把那个Client所在的JVM也一起重启。

ElasticSearch用作查询引擎和数据存储,包括原始数据和分析结果。

Kibana用作可视化平台。Kibana是有弹性的分析和可视化平台。

Akka Actor用作ElasticSearch的数据导入导出服务。它的表现非常好,服务从来没出过故障。

S3用作集中化文件存储。

Elastic Load Balance用作节点之间的负载均衡。

MySQL用于元数据存储。

我们从Akka 2.2.x版开始用起,也碰到了一些严重问题,主要表现为:

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值