自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(248)
  • 资源 (2)
  • 收藏
  • 关注

原创 ELK整合实战,filebeat和logstash采集SpringBoot项目日志发送至ES

但此时,我们并没有开启并配置Logstash,所以FileBeat是无法连接到Logstash的。默认字段经过date插件处理后,会输出到@timestamp字段,所以,我们可以通过修改target属性来重新定义输出字段。例如:时间、日志级别、哪个类打印的日志、日志具体内容。在Logstash中可以配置过滤器Filter对采集到的数据进行过滤处理,Logstash中有大量的插件可以供我们使用。但注意,要在index中使用时间格式化,filter的输出必须包含 @timestamp字段,否则将无法解析日期。

2024-08-16 18:50:49 2345

原创 FileBeats详解

轻量型数据采集器,文档地址Beats 是一个免费且开放的平台,集合了多种单一用途的数据采集器。FileBeat专门用于转发和收集日志数据的轻量级采集工具。它可以作为代理安装在服务器上,FileBeat监视指定路径的日志文件,收集日志数据,并将收集到的日志转发到Elasticsearch或者Logstash。

2024-08-16 18:46:49 927

原创 logstash详解

Logstash通过管道完成数据的采集与处理,管道配置中包含input、output和filter(可选)插件,input和output用来配置输入和输出数据源、filter用来对数据进行过滤或预处理。Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库中。通过Logstash过滤器解析各个事件,识别已命名的字段来构建结构,并将它们转换成通用格式,最终将数据从源端传输到存储库中。机器宕机,数据也不会丢失;

2024-08-16 18:44:59 4474

原创 ElasticSearch读写性能调优

深层次理解,虽然是每隔一秒就会将内存中的segment数据刷新到segment file中,但实际上这里并没有直接到磁盘文件,而是先写入到OS Cache中。以refresh_interval为间隔时间,将保存在ES 内存缓存区中的数据 刷新到 os的文件系统缓存中,定期清空es的buffer,生成segment。注意:ES 的默认设置,已经综合考虑了数据可靠性,搜索的实时性,写入速度,一般不要盲目修改。将segment刷新到os cache中,并开放了查询权限,以提升搜索的实时性。

2024-08-15 14:15:34 1453

原创 ElasticSearch数据建模

此时如果计算平均值那么结果是(100+99+98)/3 ,但是我们期望的是(100+99+98+0+0)/5。案例:针对版本号的搜索,我们一般会对版本号进行模糊查询,优化方式将一个版本号字段变为保存Object对象类型,其实就是拆分为多个字段,字段的值如果为null,那么就会导致对该字段进行聚合操作得到的结果不准确。正则,通配符查询,前缀查询属于Term查询,但是性能不够好。对于多属性的字段,比如cookie,商品属性,可以考虑使用Nested。一个文档中,最好避免大量的字段。

2024-08-15 14:12:25 1167 1

原创 ElasticSearch文档数据关联关系处理

再更新操作时,对象类型和嵌套对象nested方式有一个问题,因为根对象和嵌套对象本质上它们还是存在一个文档中的,每次更新时就可以需要重新索引整个文档。ES提供了父子关联关系,通过维护parent/child的关系,分离它们,使父文档和子文档是两个独立的文档,更新其中一个文档不会影响另一个文档。创建子文档时,必须通过routing指定父文档id,保证父子文档在一个shard中,提高join查询性能。user字段如果保存的是一个对象数组,在搜索时添加两个查询条件,数组中两个对象分别满足一个条件。

2024-08-15 14:09:45 1150

原创 ElasticSearch数据预处理

Logstash也能对数据进行预处理操作,ingest node和Logstash最大的区别就是,ingest node是ES中的概念,只能从es的rest api请求中获取数据,并写入ES;可以对index或bulk api 请求进行拦截,对其中数据进行预处理转换,并重新返回index或bulk api。在搜索中使用painless script语句,一般不建议在搜索中使用painless script语句对字段值进行操作,这样降低了查询效率。请求参数,表示当前创建的文档需要进行预处理。

2024-08-15 14:06:18 1185

原创 ElasticSearch集群搭建与安全认证

参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/configuring-stack-security.html。每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息,其中包括:所有节点信息、所有索引信息以及相关的Mappings和Setting信息、分片的路由信息。ElasticSearch集群内部的数据是通过9300进行传输的,如果不对数据加密,可能会造成数据被抓包,敏感信息泄露。

2024-08-14 12:16:30 1969

原创 ElasticSearch聚合操作详解

同理,聚合的前半部分 query 中如果有基于时间查询,或者后半部分 aggs 部分中有基于时间聚合的,建议都使用 datemath 方式做缓存处理以优化性能。如果多次执行同一 filter 操作,这将很有效,但是即便更改过滤器中的某一个值,也将意味着需要计算新的过滤器结果。一些满足特定条件的文档的集合放置到一个桶里,每一个桶关联一个key,类比Mysql中的group by操作。下方案例中,求和返回数据量最大的3个数据,D的数据在两个shard上,结果是6,但是返回的数据中没有D。

2024-08-13 18:01:48 1820

原创 ElasticSearch 全文检索相关性 算分

BM25 就是对 TF-IDF 算法的改进,对于 TF-IDF 算法,TF(t) 部分的值越大,整个公式返回的值就会越大。相同的文本加入子字段,以提供更准确的匹配。将所有 与任意一个查询匹配的文档 都作为结果返回,各文档采用字段上最匹配的评分作为该文档最终相关性评分。检索词在文档中出现的频率越高,tf的值也就越高,最终计算出的相关性也越高。上述例子中,title和body属于竞争关系,不应该将分数简单叠加,而是应该找到单个最佳匹配的字段的评分。检索词在索引中出现的频率,出现的频率越高,idf的值越低。

2024-08-13 17:52:49 2097 1

原创 ElasticSearch分词器

这样当我们去搜索某个关键词时,ES 首先根据它的前缀或者后缀迅速缩小关键词的在 term dictionary 中的范围,大大减少了磁盘IO的次数。为了进一步提高索引效率,ES对trem的前缀或后缀构建了trem index,用于对trem本身的索引,如下图所示。基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。Elasticsearch 的JSON文档中的每个字段,都有自己的倒排索引。记录所有文档的trem,记录trem和倒排列表的关联关系。

2024-08-13 17:43:38 1511

原创 ES深分页问题分析与解决方案

当我们使用分页查询时,from+size的值超过了10000就会报错ES通过参数用来限制单次查询满足查询条件的结果窗口的大小,其默认值为10000。一般不建议修改。分页方式性能优点缺点适用场景低灵活性好,实现简单,支持随机翻页受制于max_result_window设置,不能无限制翻页;存在深度翻译问题,越往后翻译越慢。数据量比较小,能容忍深度分页问题scroll中解决了深度分页问题scroll查询的相应数据是非实时的,如果遍历过程中插入新的数据,是查询不到的;

2024-08-12 15:55:14 2175

原创 ES高级查询Query DSL查询详解、term术语级别查询、全文检索、highlight高亮

可以在highlight中使用pre_tags和post_tags"query": {"query": "牛仔",},"*": {}

2024-08-12 15:52:34 2248

原创 SpringBoot整合ElasticSearch

官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#new-features.4-4-0。当然也可以把我们之前创建的User实体类也利用上,可以发现,创建的index的mapping下只有我们加了。指定索引名,注意这里@Document是es包下的注解,不要导入错了。该接口是框架封装的用于操作Elastsearch的高级接口。指定字段类型以及分词器,它是es包下的注解,不要导入错了。

2024-08-11 18:56:00 847

原创 ElasticSearch 入门实战 、索引操作、文档操作

在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在 ES 中一个字段可以有多个类型。在之前的版本中,一个索引可以包含多个类型,每个类型代表了不同的文档结构。的优化,7.X版本的ES默认使用这种方式控制版本,所以当在高并发环境下使用乐观锁机制修改文档时,要带上当前文档的。类似,查询一条数据需要两个对象,第一个设置查询的索引,第二个设置查询语句。在ES中,索引类似于Mysql中的表(仅针对 ES 7.x 以后版本),只是类似 索引并不等于表。

2024-08-11 18:53:25 1252

原创 ES环境搭建、ES安装

全文检索是通过对文本进行全面索引和搜索的技术。首先对文本进行分词、去除停用词等。对处理后的数据建立倒排索引。索引会记录每个单词在文本中的位置信息与其他元数据信息,比如词频、权重等发起搜索请求时,搜索引擎根据搜索的关键词或短语,在建立好的索引中查找匹配文档。

2024-08-11 18:43:19 1367

原创 Kafka生产调优实践。Kafka消息安全性、消息丢失、消息积压、保证消息顺序性

Kafka是通过幂等性中单调递增的sequenceNumber来保证消息是顺序,因为是单调递增的,所以还能判断是否存在消息丢失一旦Kafka发现Producer传过来的SequenceNumber出现了跨越,那么就意味着中间有可能消息出现了丢失,就会往Producer抛出一个OutOfOrderSequenceException异常。再结合MessageQueue中的消息有序性,就能保证整体消息的消费顺序是有序的。此时,在消费者端,需要更多考虑的问题,就变成了消费重试机制造成的消息重复消费的问题。

2024-08-10 14:25:13 1002

原创 Kafka服务端日志详解

进入到上方配置文件中指定的目录下查看,topic的数据都是以topic名 + partition下标的命名方式保存的我们现在进入其中一个partition目录.index日志索引文件,采用的稀疏索引提高查询效率,记录的是消息偏移量offset 和 该消息在.log文件中的位置position.log消息保存在.log文件中,是以二进制的方式保存的。可以通过.index和.timeindex两个索引文件加速查找消息。

2024-08-10 14:21:01 3746 3

原创 Kafka服务端的各种机制实现原理

zookeeper整体元数据、Controller Broker选举机制、Leader Partition选举机制、Leader Partition自动平衡机制、Partition故障恢复机制、HW一致性保障-Epoch更新机制

2024-08-09 15:17:16 1383

原创 Kafka整合SpringBoot

【代码】Kafka整合SpringBoot。

2024-08-08 18:55:40 639

原创 Kafka Client客户端操作详解

Kafka 客户端详细属性介绍

2024-08-08 18:53:24 5409

原创 Kafka 实战使用、单机搭建、集群搭建、Kraft集群搭建

Topic是逻辑上的概念,producer和consumer通过Topic进行业务沟通Topic并不存储数据,数据是保存在Topic下的多组Partition中的,消息会尽量平均的分发在各组Partition中,每组Partition保存了Topic下的一部分消息每组Partition包含一个Leader和多个Follower,每组Partition的个数成为备份因子replica factor。

2024-08-07 15:27:04 1509

原创 分布式主键 详解

各个框架的雪花算法都有对时钟回拨的问题做相应的处理,基本思路就是记录上一次生成主键的时间lastMilliseconds,和当前时间进行比较,如果lastMilliseconds大于当前时间就表示出现了时钟回拨,处理方式要么sleep()一段时间,要么直接抛异常。现在就有一个思路,把MachineId(比如ip+端口)当做一个短的并发不是很高的分布式主键来处理,用其他分布式主键生成的方式生成工作进程位。给一个应用分配工作进程号位之后如果应用崩溃了,重启服务之后所生成的雪花算法还是需要保持一个稳定的区分度。

2024-08-06 14:41:33 1736

原创 ShardingProxy使用自定义策略,数据迁移方案

而为了保持在写入新数据库集群时,与热数据保持相同的分片逻辑,ShardingProxy与ShardingJDBC数据写入库之间,可以通过ShardingSphere的管理中心来保持规则同步。配置完数据双写后,就需要针对新数据库集群配置,配置一个ShardingJDBC数据写入库,主要完整针对新数据库集群的数据分片。这个ShardingJDBC数据写入库可以使用ShardingSphere的JDBC来创建,然后作为一个真实库,配置到之前的数据双写库当中,这样就可以完成针对新数据库集群的数据分片写入。

2024-08-05 15:06:56 1086

原创 ShardingSphere之ShardingProxy集群部署

开发者手册在conf/server.yaml配置文件中有下面这一段配置,就是关于集群部署的mode:props:ShardingSphere支持两种运行模式,Standalone独立模式和Cluster集群模式。在Standalone独立模式下,ShardingSphere不需要考虑其他实例的影响,直接在内存中管理核心配置规则就可以了。如果把整个mode都注释掉,他就是ShardingSphere默认的运行模式。

2024-08-05 15:04:43 2024

原创 ShardingSphere之ShardingProxy实战操作、分布式事务

ShardingSphere的两个核心产品分别为ShardingJDBC和ShardingProxy。前文已经详细介绍了ShardingJDBC的具体使用,接下来介绍服务端的分库分表ShardingProxy。定位为一个透明化的数据库代理,目前提供MySQL和PostgreSQL协议,透明化数据库操作。简单理解就是,他会部署成一个MySQL或者PostgreSQL的数据库服务,应用程序只需要像操作单个数据库一样去访问ShardingSphere-proxy,由ShardingProxy去完成分库分表功能。

2024-08-05 15:00:31 1830

原创 ShardingSphere自定义分布式主键生成策略、自定义分片规则

import com/*** 改进雪花算法,让他能够 %4 均匀分布。try {} }/*** 改进雪花算法,让他能够 %4 均匀分布。try {

2024-08-04 18:21:41 1527

原创 ShardingSphere 内核工作原理

比如我们之前提到,在ShardingJDBC5版本下,对一个分片库的多次查询,会通过UNION 合并成一个大的SQL,这也是一种优化改写。在包含分表的场景中,需要将分表配置中的逻辑表名称改写为路由之后所获取的真实表名称。接下来,用户只需要面向逻辑库和逻辑表来写SQL,最终由ShardigSphere的改写引擎将SQL改写为在真实数据库中可以正确执行的语句。1.5.x版本后,采用自研的SQL解析器,针对分库分表场景,采取对SQL半理解的方式,提高SQL解析的性能和兼容性。SQL改写分为正确性改写和优化改写。

2024-08-04 18:12:53 986

原创 ShardingSphere 之ShardingJDBC扩展功能:分片审计、数据加密、读写分离、广播表、绑定表

我两个数据表都是用的uid进行的分表,按理说一条uid数据要么同时在sys_user1 和 user_info1 数据表中,要么同时在sys_user2 和 user_info2 数据表中 根本就不需要进行四次sql执行。这种查询明显性能是非常低的,如果两张表的分片数更多,执行的SQL也会更多。而实际上,用户表和用户信息表,他们都是按照uid进行分片的,他们的分片规则是一致的。使用绑定表进行多表关联查询时,必须使用分片键进行关联,否则会出现笛卡尔积关联或跨库关联,从而影响查询效率。

2024-08-04 13:29:32 1382

原创 ShardingSphere中的ShardingJDBC常见分片算法的实现

我们可以通过自定义分片算法,能够提前判断一些不合理的查询条件。就比如我当前status的值只有0和1,如果查询的时候status为3就根本没必要去查询数据库了。对于complex_inline复杂的分片算法,用一个简单的分片表达式也有点不太够用了。我们可以创建一个java类,实现ShardingSphere提供的接口 自己在java代码中写相应的分片策略COMPLEX->ComplexKeysShardingAlgorithm 这里就拿复杂的分片策略举例import com/**

2024-08-03 17:20:45 1369

原创 DynamicDataSource多数据源的管理,动态新增&切换数据源

在yml配置文件中配置多个数据源配置类中读取yml配置文件中的内容,并生成多个DataSource对象存入Spring容器中,在后面还可以添加对应的事务管理器中添加对应的数据源接下来自定义一个类,继承AbstractRoutingDataSource类添加用户查询用户在类上使用@DS注解,也可以在方法上使用@DS注解来指定使用某个数据源在上方的案例中我们是在yml配置文件中指定了两个数据源。并且在Service方法上使用注解指定了使用某一个数据源。我们也可以动态的新增数据源,或者是根据请求

2024-08-02 16:44:35 1283

原创 MongoDB change stream 详解

Change Stream指数据的变化事件流,MongoDB从3.6版本开始提供订阅数据变更的功能。Change Stream 是 MongoDB 用于实现变更追踪的解决方案,类似于关系数据库的触发器,但原理不完全相同:**Change Stream 是基于 oplog 实现的,提供推送实时增量的推送功能。**它在 oplog 上开启一个 tailable cursor 来追踪所有复制集上的变更操作,最终调用应用中定义的回调函数。被追踪的变更事件主要包括:从MongoDB 6.0开始,change stre

2024-08-01 15:26:19 1353

原创 MongoDB性能调优

默认情况下该功能是关闭的,对某个业务库开启Profiler模块之后,符合条件的慢操作日志会被写入该库的system.profile集合中。Profiler模块所记录的日志都是已经发生的事情,db.currentOp()命令则与此相反,它可以用来查看数据库当前正在执行的一些操作。想象一下,当数据库系统的CPU发生骤增时,我们最想做的无非是快速找到问题的根源,这时db.currentOp就派上用场了。,以及多个分片的压力分布。该功能的设计非常类似于Linux系统中的vmstat命令,可以呈现出实时的状态变化。

2024-08-01 15:23:33 1601

原创 MongoDB开发规范与数据建模

那么到底选择哪个方案更合理呢?从理论分析上可以看出,不管是小时存储,还是分钟存储,都是利用了MongoDB的信息聚合的能力。

2024-08-01 15:18:20 1419

原创 MongoDB多文档事务详解

原子性(atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。一致性(consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。隔离性(isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。持久性(durability):已被提交的事务对数据库的修改应该是永久性的。在MongoDB中,对单文档的操作是原子的。

2024-07-31 15:24:29 1358

原创 MongoDB两地三中心集群架构设计、全球多写集群架构设计

搭建简单,使用复制集机制,无需第三方软件使用Retryable Writes以后,即使出现数据中心故障,对前端业务没有任何中断 (Retryable Writes 在4.2以后就是默认设置)

2024-07-30 14:28:22 1164

原创 MongoDB分片集群的搭建与架构

当数据量非常大时,复制集提高了读的性能,而分片就提高了写的性能分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。MongoDB复制集实现了数据的多副本复制及高可用,但是一个复制集能承载的容量和负载是有限的。存储容量需求超出单机的磁盘容量。活跃的数据集超出单机内存容量,导致很多请求都要从磁盘读取数据,影响性能。写IOPS超出单个MongoDB节点的写服务能力。分片集群架构需要为各个分片节点的Primary进行复制集。

2024-07-30 12:49:37 1035

原创 MongoDB复制集底层原理

上述场景导致,Primary上的每次往数组里插入一个新元素(请求大概几百字节),oplog里就要记录整个数组的内容,Secondary同步时会拉取oplog并重放,Primary到Secondary同步oplog的流量是客户端到Primary网络流量的上百倍,导致主备间网卡流量跑满,而且由于oplog的量太大,旧的内容很快被删除掉,最终导致Secondary追不上,转换为RECOVERING状态。**对于写入的业务数据来说,如果已经被复制到了复制集的大多数节点,则可以避免被回滚的风险。

2024-07-29 15:23:48 947

原创 MongoDB复制集/集群搭建详解

Mongodb复制集(Replication Set)包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保证数据一致性。数据写入时将数据迅速复制到另一个独立节点上在接收写入的节点发生故障时自动选举出一个新的替代节点数据分发: 将数据从一个区域复制到另一个区域,减少另一个区域的读延迟读写分离: 不同类型的压力分别在不同的节点上执行。

2024-07-29 12:57:52 1916 1

原创 MongoDB索引详解、explain执行计划详细介绍

如果要定位某一行数据(key/value)的位置,可以先通过block的位置找到此page(相对于文件起始位置的偏移量),再通过page找到行数据的相对位置,最后可以得到行数据相对于文件起始位置的偏移量offsets。B+ Tree中的leaf page包含一个页头(page header)、块头(block header)和真正的数据(key/value),其中页头定义了页的类型、页中实际载荷数据的大小、页中记录条数等信息;通过对规划器隐藏索引,用户可以在不实际删除索引的情况下评估删除索引的潜在影响。

2024-07-28 22:39:43 988

upload jar包.zip

upload_bill.jar

2021-04-15

css.chm html5.chm javaee.chm javajcript.chm jdk api jQueryAPI

各种常用的api 都是中文 css+html+javaEE+javaScript+Javase+Jquery

2020-12-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除