一次简单的springboot+dubbo+flume+kafka+storm+redis系统
最近无事学习一下,用springboot+dubbo+flume+kafka+storm+redis做了一个简单的scenic系统
scenicweb:展现层,springboot+dubbo
scenicservice:业务层(向展现层提供数据),dubbo+redis
scenic:数据统计,kafka+storm+redis统计数据
服务器:2台
192.168.252.110
genLog.sh(产生日志)
flume-1(收集日志,sink到kafka:192.168.252.110:9090,192.168.252.111:9090)
zookeeper-1,-2,-3(192.168.252.110:2181,192.168.252.110:2182,192.168.252.110:2183)
kafka-1(192.168.252.110:9090)
- redis集群(192.168.252.110:7000,192.168.252.110:7001,192.168.252.110:7002,192.168.252.110:7003,192.168.252.110:7004,192.168.252.110:7005)
192.168.252.111
- kafka-1(192.168.252.111:9090)
- storm-1(storm只启动了一个,因为虚拟机真的扛不住)
1、scenicweb(springboot+dubbo)
之所以用springboot,是因为觉得每次学习时需要搭建一个系统太麻烦,想学一个简单的搭建系统的方法,于是此处就用了springboot。
springboot的核心思想是无XML配置,大部门配置都采用系统的默认配置,这便大大减少了搭建系统步骤。
- pom.xml
pom.xml需要引入一个parent,后面,根据自己的需要,导入相应的spring-boot-starter-xx,如web系统只需要引入一个
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-xx里则包含web系统需要的一些jar包,这些jar都有他的默认版本,你可以在properties里修改你想改动的版本。
- 启动
springboot的启动方法可以放在main函数里执行
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}
}
springboot的默认扫描Application所在类的同级目录以及它的子目录,所以Application类一般放在项目包含所有需要扫描的目录下。
- 配置
springboot的配置文件默认放在resource下application.properties或application.yml,springboot启动时会自动扫描,这里你可以修改一些默认配置,配置自己的属性。
- 无xml配置
@Configuration 标注该类是一个配置类.类似于我们定义的 applicationContext.xml
@Bean 类似于我们在之前的 spring 配置文件中配置的<bean id=”” class=””/>
- 自动化部署
springboot入库类上的@SpringBootApplication是springboot的核心注解,他是一个组合注解,包含了@SpringBootConfiguration,类似@Configuration,springboot推荐使用@SpringBootConfiguration。@EnableAutoConfiguration,启动自动配置。@ComponentScan,默认扫描Application所在类的同级目录以及它的子目录
2、scenicservice(dubbo+redis)
dubbo官网已更新,想系统学习的可以移步:http://dubbo.apache.org/#/docs/user/quick-start.md?lang=zh-cn,这里简单说几点吧
- dubbo配置的优先级
方法级优先,接口次之,全局配置再次之。如果级别一样,消费者优先,提供方次之
- dubbo属性配置
dubbo可以通过jvm,xml,已经dubbo.properties配置(dubbo会自动加载classpath下的dubbo.properties)。
覆盖策略:jvm>xml>properties
- 集群容错
failover(失败切换其他服务器自动重试,默认重试2次),failfast(快速失败,失败后不会重试,通常用于新增等非幂等性操作),failsafe(失败安全,失败后直接忽略),failback(失败后自动恢复,定时重发,通常用于失败通知)等等
- 负载均衡
random等。。。配置负载均衡策略时字母必须都小写,可配置
- 服务端线程池
如果事件处理很快,并且不会发生新的io请求,则直接在io线程上处理更快,减少线程池调度
如果事件处理很慢,或者需要重新发起io情况,如数据库查询,必须派发到线程池,否则io线程阻塞,将导致不能接收其他请求
如果用 IO 线程处理事件,又在事件处理过程中发起新的 IO 请求,比如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。
<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
dispatcher:all(全部请求都派发到线程池,包括请求、响应、连接事件、断开事件、心跳等),direct(所有时间都不派发都线程池)等
threadpool:fixed(固定大小线程池)、cached(可缓存线程池,空闲1分钟删除)、limited(可伸缩线程池,但线程池只增不涨,避免收缩时突然来了大流量引起性能问题)等
- dubbo多协议
不能服务适合不同协议,如大数据适合短协议,小数据适合长协议
- 结果缓存
lru(最近最少使用原则)等
- mock容错
本地伪装通常用于服务降级,当服务方服务关掉后,客户端不抛出异常,而是返回自定义信息
- 并发控制
可以通过设置限制服务端并发执行数:executes="10"
同理,可限制客户端并发数:actives="10"
除了上述配置相关属性外,dubbo还可以通过SPI,自定义配置策略,具体看参照官网
本次项目再调用redis时发现一个问题,当集群发生故障导致主从发生变化时,redis会报JedisMovedDataException,当前解决的办法是通过JedisSlotBasedConnectionHandler的renewSlotCache()方法来刷新连接。工具类也没写好,也没想到更好的方法,以后再完善吧
3、scenic(kafka+storm+redis)
kafka整合storm,将数据分析结果保存到redis中,好像也没啥好写的
4、linux
通过genLog.sh随机产生日志,再通过flume将日志发送到kafka中。scenic项目将kafka接受的日志进行解析计算,最后将计算结果保存到redis中。
redis采用一用一备,3台主服务器,3台备服务器。redis调用少时没感觉,当调用频率变高时,redis主从服务器会切换角色,不知道是不是主redis没抗住压力down了,然后从服务器重新选举上的。
这里不得不说,storm真的是十分吃配置,扛不住!!!
一次简单的springboot+dubbo+flume+kafka+storm+redis系统的更多相关文章
- Flume+Kafka+Storm+Redis 大数据在线实时分析
1.实时处理框架 即从上面的架构中我们可以看出,其由下面的几部分构成: Flume集群 Kafka集群 Storm集群 从构建实时处理系统的角度出发,我们需要做的是,如何让数据在各个不同的集群系统之间 ...
- 简单测试flume+kafka+storm的集成
集成 Flume/kafka/storm 是为了收集日志文件而引入的方法,最终将日志转到storm中进行分析.storm的分析方法见后面文章,这里只讨论集成方法. 以下为具体步骤及测试方法: 1.分别 ...
- Flume+Kafka+storm的连接整合
Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...
- flume+kafka+storm+mysql架构设计
前段时间学习了storm,最近刚开blog,就把这些资料放上来供大家参考. 这个框架用的组件基本都是最新稳定版本,flume-ng1.4+kafka0.8+storm0.9+mysql (项目是mav ...
- Flume+Kafka+Storm+Hbase+HDSF+Poi整合
Flume+Kafka+Storm+Hbase+HDSF+Poi整合 需求: 针对一个网站,我们需要根据用户的行为记录日志信息,分析对我们有用的数据. 举例:这个网站www.hongten.com(当 ...
- Flume+Kafka+Storm整合
Flume+Kafka+Storm整合 1. 需求: 有一个客户端Client可以产生日志信息,我们需要通过Flume获取日志信息,再把该日志信息放入到Kafka的一个Topic:flume-to-k ...
- 大数据处理框架之Strom:Flume+Kafka+Storm整合
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 storm-0.9 apache-flume-1.6.0 ...
- flume+kafka+storm
centos06.6+JDK1.7 flume1.4+kafka2.10+storm0.9.3 zookeeper3.4.6 集群: 192.168.80.133 x01 192.168.80.134 ...
- flume+kafka+storm单机部署
flume-1.6.0 kafka0.9.0.0 storm0.9.6 一.部署flume 1.解压 tar -xzvf apache-flume-1.6.0-bin.tar.gz -C ../app ...
随机推荐
- Linux 常用命令安装
系统版本: Centos-7-x86_64-minimal 1. 网络相关 1.1 MTR 跟踪路由,还可以测试丢包率.网络延迟 yum -y install mtr 2. 文件相关 2.1 sz ...
- 【零基础】speech driven animation中文安装使用指南
注:原项目名叫Speech-Driven Animation,所以我这里就简称为SDA 开局一张图,后面自动编 相信前段时间爆火的DeepNude(AI扒衣)让很多人惊掉了大牙,AI还能干这个?!如果 ...
- 转载 AMI方案和Insyde方案
闲来无事回头看看,自毕业以来一直都在BIOS这个行业打转,目前的各种新闻来看全球的IT行业都似乎不太景气,PC出货量一泻千里,想要有所转机看起来不是一天两天的事情,想来无事来看看做过的几个UEFI B ...
- Vbox中多台虚拟机搭建简单子网
一.目标拓扑结构: 要使192.168.31.1和192.168.32.1互相ping通. 二.步骤及问题: 1.路由器配置 SEED_Router配置IP并开启路由转发协议: ifconfig et ...
- ndarray的axis问题
始终记不住np中axis是对应到哪个,还没系统地去学习下 先暂记两个常用的结果 1.[:,np.newaxis] 与 [np.newaxis, :] 注:这是ndarray才有的分片方法(np重写了[ ...
- POJ 1837 -- Balance(DP)
POJ 1837 -- Balance 转载:優YoU http://user.qzone.qq.com/289065406/blog/1299341345 提示:动态规划,01背包 初看此题第 ...
- 数据库 | SQL查询&LIMIT的用法
body{ text-align:left; width:80%; margin:10px 100px; } 前言 select top n 形式的语句可以获取查询的前几个记录,但是 mysql没有此 ...
- driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口
有时,使用selenium 定位页面元素时,浏览器明明打开的是需要定位的页面,但就是定位不到元素.打印一下元素page_source,会发现源码与页面不同. 主要问题是页面没有加载完成导致,需要设置 ...
- Python类call函数的作用
call函数可以把类变成函数来调用call方法 class Demo(): def __init__(self, name): self.name = name def __call__(self): ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-1.常用的第三方支付和聚合支付介绍
笔记 第六章 开发在线教育视频站点核心业务之从零基础接入 微信扫一扫网页支付 1.常用的第三方支付和聚合支付介绍 简介:介绍常用的第三方支付和聚合支付 1.什么是第三方支付 第 ...