首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用于服务器流的Akka Streams (gRPC、Scala)

Akka Streams是一个用于处理和传输元素序列的库,它建立在Akka Actors之上,使得流的摄入和处理变得简单。Akka Streams通过提供高抽象层次的API,支持创建复杂的流处理逻辑,并且可以重复使用流处理图,非常适合于基于大数据的应用。以下是关于Akka Streams的相关信息:

Akka Streams的基础概念

  • Source:流的入口,负责产生数据流。
  • Flow:流中的处理步骤,对数据流进行转换。
  • Sink:流的出口,负责消费数据流。

Akka Streams的优势

  • 反应性:能够快速响应外部变化。
  • 分布式:支持在分布式环境中运行。
  • 位置透明性:流处理逻辑可以在不同节点间移动而不影响程序的正确性。
  • 集群:支持集群部署,提高系统的可用性和容错性。
  • Remoting:支持远程调用,便于分布式系统的开发和维护。
  • 可重用性:流处理图可以重复使用,提高开发效率。

Akka Streams的应用场景

  • 实时数据处理
  • 数据转换和过滤
  • 批处理任务
  • 分布式计算。

gRPC与Akka Streams的结合使用

gRPC是一个高性能、开源的通用RPC框架,支持多种语言,使用Protocol Buffers作为接口描述语言。Akka Streams与gRPC结合,可以实现服务器端流式RPC模式,即客户端发送一个请求后,服务器可以返回一个消息流。

在Scala中的使用

Scala是一种运行在Java虚拟机上的现代编程语言,与Akka框架完美集成。使用Scala和Akka Streams可以构建高效、可扩展的服务器端流处理应用。

请注意,虽然这里提供了关于Akka Streams的详细信息,但由于技术的快速发展,建议在实际项目中参考最新的官方文档和教程,以获取最准确的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PICE(1):Programming In Clustered Environment - 集群环境内编程模式

在5月份的深圳scala meetup上我分享了有关集群环境下的编程模式思路。我提供了下面这个示意图: ? 上图是我正在探讨的“现代企业I.T综合数据平台”网络结构。...我首先考虑了akka-http,在准备过程中接触了gRPC,发现gRPC更加适合跨jvm的程序控制,主要因为gRPC支持双向的流控制。...我想如果进一步延伸的话把流元素变成程序指令应该可以实现程序流的控制了。...我们在前面几个章节里已经实现了gRPC与akka-stream的集成:这样我们就可以通过akka-stream实现一种互动的数据交换。所以:streaming就是标题上面提到的编程模式了。...import akka.stream.scaladsl._ import scalikejdbc._ import scalikejdbc.streams._ import akka.NotUsed

1.4K30
  • 异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

    ---- Akka概述 Akka 是一个开源的并发、分布式、基于消息驱动的框架,用于构建高可伸缩性、可靠性和并发性强的应用程序。...它是基于 JVM(Java虚拟机)的,主要使用 Scala 编程语言开发,但也提供了 Java API,因此可以在 Java 和 Scala 中使用。...插件和扩展:Akka 提供了丰富的插件和扩展机制,可以轻松集成其他库和框架,如 Akka HTTP、Akka Streams 等,以构建全栈应用程序。...下面看下Akka的特性: 可以更简单地构建并发和分布式系统 Akka基于Actor模型和Streams,让我们可以构建可伸缩的,并且可以高效使用服务器资源,使用多个服务器进行扩展的系统。...完全异步和基于流的HTTP服务器和客户端为构建微服务提供了一个很好的平台。

    1.4K40

    PICE(2):JDBCStreaming - gRPC-JDBC Service

    在一个akka-cluster环境里,从数据调用的角度上,JDBC数据库与集群中其它节点是脱离的。这是因为JDBC数据库不是分布式的,不具备节点位置透明化特性。...所以,JDBC数据库服务器必须通过服务方式来向外提供数据操。在这种场景里服务端是JDBC服务,其它节点,包括其它的JDBC数据库节点都是这个JDBC服务的调用客户端。...因为我们已经明确选择了在akka-cluster集群环境里实施gRPC服务模式,通过akka-stream的流控制方式实现数据库操作的程序控制,所以在本次讨论里我们将示范说明gRPC-JDBC-Streaming...这就说明服务端提供的服务模式是一样的。在我们这个例子里它们都是对每个收到的JDBCQuery发还相关的数据流。实际上这两项服务的区别在客户方。...import akka.stream.scaladsl._ import scalikejdbc._ import scalikejdbc.streams._ import akka.NotUsed

    1.5K00

    ScalaPB(5):用akka-stream实现reactive-gRPC

    在前面几篇讨论里我们介绍了scala-gRPC的基本功能和使用方法,我们基本确定了选择gRPC作为一种有效的内部系统集成工具,主要因为下面gRPC支持的几种服务模式: 1、Unary-Call:独立的一对...那么如果能把gRPC中ListenableFuture和StreamObserver这两种类型转成akka-stream的基本类型应该就能够实现所谓的reactive-gRPC了。...如果我们能用akka-stream编程方式实现gRPC服务调用的话,可能会遭遇下面的场景:在服务端我们只需要实现一种akka-stream的Flow把进来的request转化成出去的response,如下...先用IDL定义一个流输入输出的服务函数keepAdding: service SumNumbers { rpc SumPair(NumPair) returns (SumResult) {}.../gRPCAkkaStreamService.scala package learn.grpc.akka.stream.services.impl import akka.NotUsed import

    1.2K30

    Akka-CQRS(9)- gRPC,实现前端设备与平台系统的高效集成

    由于gRPC支持http/2通讯协议,支持持久连接方式及双向数据流。...所以对于POS设备这样的前端选择gRPC作为网络连接方式来实现实时的操作控制应该是正确的选择,毕竟采用恒久连接和双向数据流效率会高很多。...gRPC是google公司的标准,基于protobuffer消息:一种二进制序列化数据交换机制。gRPC的优势在这里就不再细说,读者可以参考前面有关gRPC的讨论博文。 下面是系统结构示意图: ?...但就是没有scala的,只能找第三方的scala客户端了。...现在市面可供选择的gRPC-scala-客户端有scalaPB和akka-grpc两个,akka-grpc是基于akka-stream和akka-http构建的,按理来说会更合适,但由于还是处于preview

    1.2K20

    Play For Scala 开发指南 - 第1章 Scala 语言简介

    与此同时,Scala生态发展的也非常不错,下面列举几个具有代表性的项目。  分布式系统 Akka是一个工具库,可以帮助你构建一个基于消息驱动的高可用分布式系统。...Akka包含很多模块,Akka Actor是Akka的核心模块,使用Actor模型实现并发和分布式,可以将你从Java的多线程痛苦中解救出来;Akka Streams可以让你以异步非阻塞的方式处理流数据...,并且支持背压(backpressure); Akka Http实现了一套基于流的HTTP服务端和客户端;Akka Cluster可以帮你实现一个分布式集群系统;Cluster Sharding可以帮你做集群的分片处理...;Distributed Data可以帮助你在集群之间分享数据;Alpakka可以帮你为Akka Streams集成不同的数据源;Akka Persistence可以帮你处理Actor消息的持久化存储,...需要注意的是,请跳过第20章Actor,因为从Scala 2.10开始,内置actor实现已经弃用,改用Akka。

    1.4K60

    Akka(21): Stream:实时操控:人为中断-KillSwitch

    akka-stream是多线程non-blocking模式的,一般来说,运算任务提交到另外线程后这个线程就会在当前程序控制之外自由运行了。...任何时候如果需要终止运行中的数据流就必须采用一种任务柄(handler)方式来控制在其它线程内运行的任务。这个handler可以在提交运算任务时获取。...实例就像immutable对象,我们可以在多个数据流中插入SharedKillSwitch,然后用这一个共享的handler去终止使用了这个SharedKillSwitch的数据流运算。...还有一个KillSwitches.singleBidi类型,这种KillSwitch是用来终止双流向数据流运算的。我们将在下篇讨论里介绍。...下面是本次示范的源代码: import akka.stream.scaladsl._ import akka.stream._ import akka.actor._ import scala.concurrent.duration

    83760

    ScalaPB(0): 找寻合适的内部系统微服务集成工具

    曾经花了点时间研究了一下akka-http:当时我初选的所谓系统集成工具,它是通过json格式数据交换来集成系统的。json是个标准数据格式,所以可以实现异类系统之间的数据交换。...实际上使用akka-http需要的门槛很高,即使akka-http已经提供了许多帮助http操作的类型,但光是理解http协议内容及httprequest,httpresponse细节、构建、使用方法就花去了我几个星期的精力...在scala编程世界里我们可以用scalaPB来实现对gRPC和protobuf的使用。...编译.proto文件后产生scala语言的数据类型和抽象服务类,这样我们就可以在scala环境里使用protobuf和gRPC实现微服务的集成编程了。...我将会在下面几篇博文里介绍使用scalaPB进行protobuf数据转换、gRPC微服务实现、gRPC的流式操作以及gRPC流与json之间转换方法等。

    65720

    Kafka Streams - 抑制

    有些事情也可以用KSQL来完成,但是用KSQL实现需要额外的KSQL服务器和额外的部署来处理。相反,Kafka Streams是一种优雅的方式,它是一个独立的应用程序。...Kafka Streams应用程序可以用Java/Scala编写。 我的要求是将CDC事件流从多个表中加入,并每天创建统计。为了做到这一点,我们不得不使用Kafka Streams的抑制功能。...◆聚合的概念 Kafka Streams Aggregation的概念与其他函数式编程(如Scala/Java Spark Streaming、Akka Streams)相当相似。...这篇文章只是涵盖了其中一些重要的概念。关于详细的聚合概念,请访问confluent文档。 聚合的概念 聚合是一种有状态的转换操作,它被应用于相同键的记录。...它是有状态的,因为计算当前状态要考虑到当前状态(键值记录)和最新状态(当前聚合)。这可以用于移动平均数、总和、计数等场景。 Reduce。 你可以使用Reduce来组合数值流。

    1.6K10

    Akka-CQRS(10)- gRPC on SSLTLS 安全连接

    使用gRPC作为云平台和移动前端的连接方式,网络安全应该是必须考虑的一个重点。gRPC是支持ssl/tls安全通讯机制的。用了一个周末来研究具体使用方法,实际上是一个周末的挖坑填坑过程。...gRPC的ssl/tls的原理是在服务端安装安全证书公用certificate和私钥key, 在客户端安装公共证书就可以了,gRPC代码是这样写的: // Server SslContext sslContext..." % "1.0.1", "org.mongodb.scala" %% "mongo-scala-driver" % "2.6.0", "com.lightbend.akka" %% "akka-stream-alpakka-mongodb...看来现在应该是证书的问题了。先看看是不是因为使用的证书是自签的self-signed-certificate。grpc-java里提供了一些测试用的证书和私钥和说明文档。...这次起码证明grpc ssl/tls是可以发挥作用的。

    1.3K40

    Akka-Cluster(5)- load-balancing with backoff-supervised stateless computation - 无状态任务集群节点均衡分配

    分布式程序运算是一种水平扩展(scale-out)运算模式,其核心思想是能够充分利用服务器集群中每个服务器节点的计算资源,包括:CPU、内存、硬盘、IO总线等。...细分的任务相互之间可以有关联或者各自为独立运算,使用akka-cluster可以把任务按照各节点运算资源的负载情况进行均匀的分配,从而达到资源的合理充分利用以实现运算效率最大化的目的。...集群节点负载均衡是一种任务中央分配方式,其实是在集群环境下的router/routees运算模式,只是现在的router可以把任务发送给跨服务器上的actor。...具体情况请参考下面测试程序的输出: package my.akka import akka.actor....import scala.concurrent.duration._ import scala.util._ import akka.cluster._ import sdp.grpc.services

    1.5K20

    akka-grpc - 应用案例

    上期说道:http/2还属于一种不算普及的技术协议,可能目前只适合用于内部系统集成,现在开始大面积介入可能为时尚早。...不过有些项目需求不等人,需要使用这项技术,所以研究了一下akka-grpc,写了一篇介绍。本想到此为止,继续其它项目。想想这样做法有点不负责任,像是草草收场。...毕竟用akka-grpc做了些事情,想想还是再写这篇跟大家分享使用kka-grpc的过程。 我说过,了解akka-grpc的主要目的还是在protobuf的应用上。这是一种高效率的序列化协议。...这里就需要仔细考虑图片在终端到平台、然后集群节点与点actor间的传输效率了。如何在akka系统里使用protobuf格式的数据正是本篇讨论和示范的目的。...akka-grpc应用一般从IDL文件里消息类型和服务函数的定义开始,如下面这个.proto文件示范: syntax = "proto3"; import "google/protobuf/wrappers.proto

    89610
    领券