基于Bboss快速构建高效、可靠、安全的Elasticserach全文检索以及统计分析应用

本文主要是介绍基于Bboss快速构建高效、可靠、安全的Elasticserach全文检索以及统计分析应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

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兼容性说明如下:

bbossElasticsearchspring boot
all1.x1.x,2.x,3.x
all2.x1.x,2.x,3.x
all5.x1.x,2.x,3.x
all6.x1.x,2.x,3.x
all7.x1.x,2.x,3.x
all8.x1.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 {@Idprivate 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 {@Autowiredprivate 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的增删查改操作了。

图片

这篇关于基于Bboss快速构建高效、可靠、安全的Elasticserach全文检索以及统计分析应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/740516

相关文章

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex