首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

akka-streams - 从应用角度学习:basic stream parts

实际上很早就写了一系列关于akka-streams的博客。但那个时候纯粹是为了了解akka而去学习的,主要是从了解akka-streams的原理为出发点。因为akka-streams是akka系列工具的基础,如:akka-http, persistence-query等都是基于akka-streams的,其实没有真正把akka-streams用起来。这段时间所遇到的一些需求也是通过集合来解决的。不过,现在所处的环境还是逼迫着去真正了解akka-streams的应用场景。现状是这样的:跨入大数据时代,已经有大量的现代IT系统从传统关系数据库转到分布式数据库(非关系数据库)了。不难想象,这些应用的数据操作编程不说截然不同吧,肯定也会有巨大改变。特别是在传统SQL编程中依赖数据关系的join已经不复存在了,groupby、disctict等操作方法也不是所有的分布式数据库都能支持的。而这些操作在具体的数据呈现和数据处理中又是不可缺少的。当然,有很多需求可以通过集合来满足,但涉及到大数据处理我想最好还是通过流处理来实现,因为流处理stream-processing的其中一项特点就是能够在有限的内存空间里处理无限量的数据。所以流处理应该是分布式数据处理的理想方式了。这是这次写akka-streams的初衷:希望能通过akka-streams来实现分布式数据处理编程。

01

alpakka-kafka(8)-kafka数据消费模式实现

上篇介绍了kafka at-least-once消费模式。kafka消费模式以commit-offset的时间节点代表不同的消费模式,分别是:at-least-once, at-most-once, exactly-once。上篇介绍的at-least-once消费模式是通过kafka自身的auto-commit实现的。事后想了想,这个应该算是at-most-once模式,因为消费过程不会影响auto-commit,kafka在每个设定的间隔都会自动进行offset-commit。如果这个间隔够短,比整个消费过程短,那么在完成消费过程前就已经保存了offset,所以是at-most-once模式。不过,如果确定这个间隔一定大于消费过程,那么又变成了at-least-once模式。具体能实现什么消费模式并不能明确,因为auto-commit是无法从外部进行控制的。看来实现正真意义上的at-least-once消费模式还必须取得offset-commit的控制权才行。

01

alpakka-kafka(2)-consumer

alpakka-kafka-consumer的功能描述很简单:向kafka订阅某些topic然后把读到的消息传给akka-streams做业务处理。在kafka-consumer的实现细节上,为了达到高可用、高吞吐的目的,topic又可用划分出多个分区partition。分区是分布在kafka集群节点broker上的。由于一个topic可能有多个partition,对应topic就会有多个consumer,形成一个consumer组,共用统一的groupid。一个partition只能对应一个consumer、而一个consumer负责从多个partition甚至多个topic读取消息。kafka会根据实际情况将某个partition分配给某个consumer,即partition-assignment。所以一般来说我们会把topic订阅与consumer-group挂钩。这个可以在典型的ConsumerSettings证实:

02

Linux系统中同时运行多个comcat

vi /etc/profile   在其中加入   ##########first tomcat###########   CATALINA_BASE=/usr/local/tomcat   CATALINA_HOME=/usr/local/tomcat   TOMCAT_HOME=/usr/local/tomcat   export CATALINA_BASE CATALINA_HOME TOMCAT_HOME   ##########first tomcat############   ##########second tomcat##########   CATALINA_2_BASE=/usr/local/tomcat_2   CATALINA_2_HOME=/usr/local/tomcat_2   TOMCAT_2_HOME=/usr/local/tomcat_2   export CATALINA_2_BASE CATALINA_2_HOME TOMCAT_2_HOME   ##########second tomcat##########   保存退出。   #source /etc/profile   来到第二个tomcat的bin目录下   在catalina.sh中加入   export CATALINA_BASE=$CATALINA_2_BASE   export CATALINA_HOME=$CATALINA_2_HOME   最后把tomcat_2/conf下的server.xml打开 修改shudown端口与启动端口。 <Server port="8005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 这样就可以在linux下同时运行两个tomcat了。运行更多tomcat方法是一样的。 要点就是tomcat启动的时候会去查找tomat 的根目录,而这是通过查询系统环境变量CATALINA_HOME 以及 CATALINA_BASE 来做到的,于是我们只需要设置这两个变量即可。 现在我们把tomcat拷贝成2份,分别为 tomcat1 和 tomcat2,tomcat1 我们使用之前配置好的默认配置(CATALINA_HOME 以及 CATALINA_BASE 均指向 tomca1 目录),但tomcat2 我们不能再使用系统上配置的这两个变量了,那么我们就在 tomcat2的bin目录下面的 catalina.sh 临时修改设置 CATALINA_HOME 和 CATALINA_BASE 为tomcat2的根目录即可,如果再加tomcat 以此类推即可。

00
领券