一、简介
bboss后端基于gradle模块化构建,灵活便捷。框架模块丰富,涵盖数据同步etl工具、j2ee开发框架、微服务、数据库、中间件、安全、配置、缓存、国际化、elasticsearch client、web session共享、redis、kafka、mongodb工具包等常用模块,最大程度满足开发需要。同时,严格遵守web安全规范,从根本上避免sql注入、xss攻击、csrf攻击等常见的 web 攻击手段。支持主流的分布式微服务架构,快速构建高可用服务集群。
bboss基于apache license开源协议,由开源社区bboss发起和维护,主要由以下三部分构成:
-
elasticsearch highlevel java restclient , 一个高性能高兼容性的elasticsearch/opensearch java客户端框架
-
数据采集同步etl ,一个基于java语言实现数据采集作业的强大etl工具,提供丰富的输入插件和输出插件,可以基于插件规范轻松扩展新的输入插件和输出插件
-
流批一体化计算框架,提供灵活的数据指标统计计算流批一体化处理功能的简易框架,可以结合数据采集同步etl工具,实现数据流处理和批处理计算,亦可以独立使用;计算结果可以保存到各种关系数据库、分布式数据仓库elasticsearch、clickhouse等,特别适用于数据体量和规模不大的企业级数据分析计算场景,具有成本低、见效快、易运维等特点,助力企业降本增效。
此外,b-boss还是中国移动面向商业客户的后台业务支撑系统,功能上不仅涵盖了集团客户和合作伙伴的计费(部分)、结算、账务、业务等方面,并且尝试建立对于全电信业务的综合服务开通,服务保障机制。
二、功能特色
-
orm和dsl二者兼顾,类mybatis方式操作elasticsearch,提供丰富的开发api和开发demo;
-
采用xml文件配置和管理检索dsl脚本,简洁而直观;提供丰富的逻辑判断语法,在dsl脚本中可以使用变量、脚本片段、foreach循环、逻辑判断、注释;基于可扩展dsl配置管理机制可以非常方便地实现数据库、redis等方式管理dsl;配置管理的dsl语句支持在线修改、自动热加载,开发和调试非常方便;
-
提供elasticsearch集群节点自动负载均衡和容灾恢复机制,elasticsearch节点断连恢复后可自动重连,高效可靠;
-
提供elasticsearch集群节点自动发现机制:自动发现elasticsearch服务端节点增加和下线操作并变更客户端集群可用节点地址清单;
-
提供http 连接池管理功能,提供精细化的http连接池参数配置管理;
-
支持在应用中访问和操作多个elasticsearch集群,每个elasticsearch集群的版本可以不同;
-
支持基于x-pack和searchguard两种安全认证机制;
-
支持elasticsearch-sql-orm和elasticsearch-jdbc;
-
提供高效的bulkprocessor处理机制;
-
提供按时间日期es历史数据清理工具;
学习成本低,上手快,代码简洁,安全高效,客户端负载容灾,兼容性好,易于集成。
三、应用场景
四、elasticsearch highlevel java restclient
bboss elasticsearch highlevel java restclient是一套基于query dsl语法操作和访问分布式搜索引擎elasticsearch/opensearch的o/r mapping高性能开发库
五、数据采集同步etl以及流批一体化计算框架
数据采集同步etl以及流批一体化计算框架,基于灵活的插件体系结构,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能,提供丰富的输入插件和输出插件,可以基于插件规范轻松扩展新的输入插件和输出插件:
六、数据采集etl
数据采集同步etl以及流批一体化计算作业分为作业配置态和运行态,作业可以独立调度运行,亦可以嵌入到应用中运行,同时也可以和各种主流的调度引擎(quartz、xxl-job等)结合运行:
通过bboss可以灵活定制具备各种功能的数据采集统计作业:
1) 只采集和处理数据作业;
2) 采集和处理数据、指标统计计算混合作业--通过importbuilder注册etlmetrics+其他数据源output插件结合实现;
importbuilder.setdatatimefield("logopertime");
importbuilder.addmetrics(keymetrics);//通过importbuilder注册指标计算器,对采集数据进行指标计算并保存指标计算结果到各种数据库
elasticsearchoutputconfig elasticsearchoutputconfig = new elasticsearchoutputconfig();
elasticsearchoutputconfig
.settargetelasticsearch("default")
.setindex("dbdemo")
.setesidfield("log_id")//设置文档主键,不设置,则自动产生文档id
.setdebugresponse(false)//设置是否将每次处理的reponse打印到日志文件中,默认false
.setdiscardbulkresponse(false);//设置是否需要批量处理的响应报文,不需要设置为false,true为需要,默认false
importbuilder.setoutputconfig(elasticsearchoutputconfig);//设置elasticsearch输出插件,保存加工后的原始数据
3) 采集数据只做指标统计计算作业--通过指标插件metricsoutputconfig实现;
metricsoutputconfig metricsoutputconfig = new metricsoutputconfig();
metricsoutputconfig.setdatatimefield("logopertime");
metricsoutputconfig.addmetrics(keymetrics);//通过metrics输出插件注册指标计算器,对采集数据进行指标计算并保存指标计算结果到各种数据库
importbuilder.setoutputconfig(metricsoutputconfig);//设置metrics输出插件
4)可以在应用中单独集成和使用指标统计功能;
七、数据采集特点
bboss支持全量和增量数据采集,增量数据采集默认基于sqlite数据库管理增量采集状态,可以配置到其他关系数据库管理增量采集状态,提供对多种不同数据来源增量采集机制:
-
基于数字字段增量采集:各种关系数据库、elasticsearch、mongodb、clickhouse等;
-
基于时间字段增量采集:各种关系数据库、elasticsearch、mongodb、clickhouse、hbase等,基于时间增量还可以设置一个截止时间偏移量,比如采集到当前时间前十秒的增量数据,避免漏数据;
-
基于文件内容位置偏移量:文本文件、日志文件基于采集位置偏移量做增量;
-
基于ftp文件增量采集:基于文件级别,下载采集完的文件就不会再采集;
-
支持mysql binlog,实现mysql增删改实时增量数据采集;
八、流批一体化计算特点
-
支持时间维度和非时间维度指标计算;
-
时间维度指标计算:支持指定统计滑动时间窗口,支持设定时间统计窗口类型,在流处理或者离线处理过程中,对于数据到来的先后顺序没有严格要求,乱序数据不影响最终指标计算结果;
-
一个指标支持多个维度和多个度量字段计算,多个维度字段值构造成指标的唯一指标key,支持有限基数key和无限基数key指标计算(维度字段组合形成的唯一指标key的个数是有限的就是有限基数,个数是无限的就是无限基数);
-
一个作业可以支持多种类型的指标,每种类型指标支持多个指标计算;
-
支持准实时指标统计计算和离线指标统计计算;
-
可以从不同的数据输入来源获取需要统计的指标数据,亦可以将指标计算结果保存到各种不同的目标数据源;
九、典型应用案例---互联网用户行为分析监控
十、兼容性
作为elasticsearch兼容性最好的java客户端和数据采集&流批一体化计算工具,bboss各版本对elasticsearch、spring boot兼容性说明如下:
bboss | elasticsearch | spring boot |
---|---|---|
all | 1.x | 1.x,2.x,3.x |
all | 2.x | 1.x,2.x,3.x |
all | 5.x | 1.x,2.x,3.x |
all | 6.x | 1.x,2.x,3.x |
all | 7.x | 1.x,2.x,3.x |
all | 8.x | 1.x,2.x,3.x |
jdk兼容性:jdk 1.8+
十一、spring boot 集成 bboss
要在spring boot中集成bboss并实现elasticsearch的增删查改,需要按照以下步骤操作:
1. 添加依赖
在你的pom.xml文件中添加bboss和elasticsearch的依赖:
<dependencies>
<!-- bboss -->
<dependency>
<groupid>com.github.bboss</groupid>
<artifactid>bboss-framework</artifactid>
<version>最新版本</version>
</dependency>
<!-- elasticsearch -->
<dependency>
<groupid>org.elasticsearch</groupid>
<artifactid>elasticsearch</artifactid>
<version>最新版本</version>
</dependency>
</dependencies>
2.配置elasticsearch
在application.properties文件中配置elasticsearch的相关信息:
spring.data.elasticsearch.cluster-name=你的集群名称
spring.data.elasticsearch.cluster-nodes=你的节点地址
3. 创建实体类
创建一个实体类,用于映射elasticsearch中的文档。例如,创建一个名为user的实体类:
import org.springframework.data.annotation.id;
import org.springframework.data.elasticsearch.annotations.document;
@document(indexname = "user", type = "_doc")
public class user {
@id
private string id;
private string name;
private int age;
// getter和setter方法
}
4. 创建repository接口
创建一个继承自elasticsearchrepository的接口,用于操作elasticsearch:
import org.springframework.data.elasticsearch.repository.elasticsearchrepository;
public interface userrepository extends elasticsearchrepository<user, string> {
}
5. 使用repository进行增删查改操作
在你的服务类中,注入userrepository并使用它进行增删查改操作:
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
@service
public class userservice {
@autowired
private userrepository userrepository;
// 增加用户
public user save(user user) {
return userrepository.save(user);
}
// 删除用户
public void delete(string id) {
userrepository.deletebyid(id);
}
// 更新用户
public user update(user user) {
return userrepository.save(user);
}
// 查询用户
public user findbyid(string id) {
return userrepository.findbyid(id).orelse(null);
}
}
现在你可以在你的应用中使用userservice来进行elasticsearch的增删查改操作了。
发表评论