基于Bboss快速构建高效、可靠、安全的Elasticserach全文检索以及统计分析应用_bboss-elasticsearch-程序员宅基地

技术标签: Java  java  elasticsearch  全文检索  

一、简介

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还是中国移动面向商业客户的后台业务支撑系统,功能上不仅涵盖了集团客户和合作伙伴的计费(部分)、结算、账务、业务等方面,并且尝试建立对于全电信业务的综合服务开通,服务保障机制。

二、功能特色

  1. ORM和DSL二者兼顾,类mybatis方式操作ElasticSearch,提供丰富的开发API和开发Demo;

  2. 采用XML文件配置和管理检索dsl脚本,简洁而直观;提供丰富的逻辑判断语法,在dsl脚本中可以使用变量、脚本片段、foreach循环、逻辑判断、注释;基于可扩展DSL配置管理机制可以非常方便地实现数据库、redis等方式管理dsl;配置管理的dsl语句支持在线修改、自动热加载,开发和调试非常方便;

  3. 提供Elasticsearch集群节点自动负载均衡和容灾恢复机制,Elasticsearch节点断连恢复后可自动重连,高效可靠;

  4. 提供Elasticsearch集群节点自动发现机制:自动发现Elasticsearch服务端节点增加和下线操作并变更客户端集群可用节点地址清单;

  5. 提供http 连接池管理功能,提供精细化的http连接池参数配置管理;

  6. 支持在应用中访问和操作多个Elasticsearch集群,每个Elasticsearch集群的版本可以不同;

  7. 支持基于X-Pack和searchguard两种安全认证机制;

  8. 支持Elasticsearch-SQL-ORM和Elasticsearch-JDBC;

  9. 提供高效的BulkProcessor处理机制;

  10. 提供按时间日期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数据库管理增量采集状态,可以配置到其他关系数据库管理增量采集状态,提供对多种不同数据来源增量采集机制:

  1. 基于数字字段增量采集:各种关系数据库、Elasticsearch、MongoDB、Clickhouse等;

  2. 基于时间字段增量采集:各种关系数据库、Elasticsearch、MongoDB、Clickhouse、HBase等,基于时间增量还可以设置一个截止时间偏移量,比如采集到当前时间前十秒的增量数据,避免漏数据;

  3. 基于文件内容位置偏移量:文本文件、日志文件基于采集位置偏移量做增量;

  4. 基于ftp文件增量采集:基于文件级别,下载采集完的文件就不会再采集;

  5. 支持mysql binlog,实现mysql增删改实时增量数据采集;

八、流批一体化计算特点

  1. 支持时间维度和非时间维度指标计算;

  2. 时间维度指标计算:支持指定统计滑动时间窗口,支持设定时间统计窗口类型,在流处理或者离线处理过程中,对于数据到来的先后顺序没有严格要求,乱序数据不影响最终指标计算结果;

  3. 一个指标支持多个维度和多个度量字段计算,多个维度字段值构造成指标的唯一指标key,支持有限基数key和无限基数key指标计算(维度字段组合形成的唯一指标key的个数是有限的就是有限基数,个数是无限的就是无限基数);

  4. 一个作业可以支持多种类型的指标,每种类型指标支持多个指标计算;

  5. 支持准实时指标统计计算和离线指标统计计算;

  6. 可以从不同的数据输入来源获取需要统计的指标数据,亦可以将指标计算结果保存到各种不同的目标数据源;

九、典型应用案例---互联网用户行为分析监控

图片

十、兼容性

作为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的增删查改操作了。

图片

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40381772/article/details/135361577

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签