自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 资源 (1)
  • 收藏
  • 关注

原创 flume的事务理解

Flume事务概念Flume在处理数据的时候,涉及到数据流动的有两个地方。一个是Source向Channel中放数据的时候,涉及到一个数据的发送(put事务)。还一个是Sink从Channel中拉取数据,也涉及到一个数据的发送。当涉及到数据的批量操作时,就会通过事务来保证数据的一致性和完整性。我们都知道Flume是一个日志文件传输的工具,传输过程会经过三大步骤:1.通过source 把数据从数据源(网络端口,本地磁盘等)读出出来2.通过source把数据传入到channel里面3.再把数据从cha

2022-01-04 10:46:09 594

原创 Redis集群写入/查询数据原理(理论)

redis集群数据存储原理:在redis cluster中,如果想要存入一个key-value,这个key首先会通过CRC16算法取余(和16384取余),结果会对应上0-16383之间的哈希槽(hash slot)最后,redis cluster会将key-value放置在对应的哈希槽中。redis集群数据获取原理:当client向redis cluster中的任意一个节点发送与数据库key有关的命令时,接收命令的节点会计算出要处理的key属于哪个哈希槽(hash slot),

2021-12-15 16:18:07 1266

原创 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

〇、摘要Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。HBase(Hadoop Database),是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,只能通过Rowkey来取数据,无法进行SQL查询。因此如果Hive可以从HBase中取数据,并结合Hive的SQL查询功能,便能做到较为复杂的SQL查询操作。Impala对存储在HDFS、HBase的数据提供直接查询互动的S

2021-11-26 16:39:27 872

原创 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作

摘要:使用Elasticsearch-SQL可以对存储在Elasticsearch中的数据执行简单的SQL查询操作,然而并不支持多表join等联接查询。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。因此如果Hive可以从Elasticsearch中取数据,并结合Hive的SQL查询功能,便能做到较为复杂的SQL查询操作。我们的目标是:支持Elasticsearch多表联接查

2021-11-26 15:49:31 628

原创 es 三类聚合

主要查看7.10 的官方文档,早期是4个分类,别大意啊!分桶 Bucket 聚合根据字段值,范围或其他条件将文档分组为桶(也称为箱)。指标 Metric 聚合从字段值计算指标(例如总和或平均值)的指标聚合。管道 Pipeline 聚合子聚合,从其他聚合(而不是文档或字段)获取输入。...

2021-11-15 16:19:51 1358

原创 Elasticsearch 如何自定义读取 mysql 词库?

Elasticsearch 实战项目中势必会用到中文分词,而中文分词器的选型包含但不限于如下开源分词器:IK 分词器https://github.com/medcl/elasticsearch-analysis-ikAnsj 分词器https://github.com/NLPchina/elasticsearch-analysis-ansjjieba 分词器https://github.com/sing1ee/elasticsearch-jieba-plugin清华大学 thulac 分词器

2021-11-15 14:04:22 297

原创 研究探讨elasticsearch 高cpu问题

首先要阐述一个观点,任何技术都是为解决某一个领域的问题而存在的,我们在使用它的时候,尽可能使用它的优势(亮点),去发挥它应具备的业务价值。es在很多公司应用非常广泛,它已经成为玩大数据的必备的技能,在之前的章节我吐槽过es写方面的问题,今天将吐槽下es查询-terms语法的那些坑,这里探讨两点:一个是多terms并发带来高CPU,另一个是terms使用不当会导致bug。业务场景我们基于门店+商品做了一个业务上的大宽表,有各种维度的查询,需要分页,比如按商品的采购组织、采购组、商品的类别(部类-大类-中类

2021-11-15 11:01:11 944

原创 SpringCloud openFeign注入原理解析-手写实现仿Feign

一、Feign的基本使用1.1、编写Feign客户端假设现在我们有一个UserClient,如下:@FeignClient(value = Services.SYSTEM_SERVER)public interface UserClient { /** * 根据用户名,获取用户信息 * @param account * @return */ @RequestMapping(value = "/user/getByAccount", meth

2021-11-13 16:21:42 1849 2

原创 XXL-JOB任务调度中心---阻塞处理策略

1、概念调度过于密集,执行器来不及处理时的处理策略。2、有哪些阻塞处理策略?包括:单机串行,丢弃后续调度,覆盖之前调度三种策略。3、对三种阻塞处理策略的理解?(1)单机串行:新的调度任务进入执行器后,该调度任务进入FIFO队列,以串行方式执行。(2)丢弃后续调度:新的调度任务进入执行器后,若存在相同的正在运行的调度任务,本次调度请求将会被丢弃并被标记为失败。(3)覆盖之前调度:新的调度任务进入执行器后,若存在相同的正在运行的调度任务,将会终止当前正在运行的调度任务,并清空队列,然后运行本次新的

2021-11-11 17:49:35 4300

原创 msb 老师讲解 start()和run()的区别

run方法是Runnable接口中定义的,start方法是Thread类定义的。 所有实现Runnable的接口的类都需要重写run方法,run方法是线程默认要执行的方法,有底层源码可知是绑定操作系统的,也是线程执行的入口。 start方法是Thread类的默认执行入口,Thread又是实现Runnable接口的。要使线程Thread启动起来,需要通过start方法,表示线程可执行状态,调用start方法后,则表示Thread开始执行,此时run变成了Thread的默认要执行普通方法。 2)通过start(

2021-11-09 13:59:29 102

原创 es的_source ,index,store学习。 在性能和空间上取舍

一._score字段存储的原始数据。_source中的内容就是搜索api返回的内容,如:默认情况下,Elasticsearch里面有2份内容,一份是原始文档,也就是_source字段里的内容,我们在Elasticsearch中搜索文档,查看的文档内容就是_source中的内容。另一份是倒排索引,倒排索引中的数据结构是倒排记录表,记录了词项和文档之间的对应关系。二.index字段index使用倒排索引存储的是,分析器分析完的词和文档的对应关系。如图:文档索引到Elasticsearch的时候,默

2021-11-05 19:34:53 1876 1

原创 es 判断空字符串字段 ,null 值

package com.xx.utils;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.gtcom.config.RestClientConfig;import lombok.extern.slf4j.Slf4j;import org.elasticsearch.action.bulk.BulkItemResponse;import org.elasticsearch.acti

2021-11-05 16:23:20 2221

原创 srping boot es 聚合 字段工具类

/*** * 聚合字典 字段 * @return */ public void aggData(String aggFiled) throws IOException { SearchSourceBuilder query = new SearchSourceBuilder(); // 根据会议id进行分组 TermsAggregationBuilder topBuilder=AggregationBuilders.te

2021-11-05 10:19:17 165

原创 es 7.0 工具类

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import lombok.extern.slf4j.Slf4j;import org.apache.lucene.search.join.ScoreMode;import org.elasticsearch.action.ActionListener;import org.e.

2021-11-04 17:23:28 682 3

原创 es updateByQuery 学习使用

这个api 一般在生产是被禁用的,首先创建索引PUT /tyl_2021{ "mappings": { "properties": { "title":{"type": "text"}, "name":{"type": "text"}, "age":{"type": "integer"}, "created":{ "type": "date", "format": "strict_date_optional_t

2021-11-04 17:17:55 5367 2

原创 Sharding-Jdbc 实现读写分离 + 分库分表zzsh 老师

| 概览ShardingSphere-Jdbc定位为轻量级Java框架,在Java的Jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,可理解为增强版的Jdbc驱动,完全兼容Jdbc和各种ORM框架。| MySQL主从复制1)docker配置mysql主从复制1)创建主服务器所需目录mkdir -p /usr/local/mysqlData/master/cnfmkdir -p /usr/local/mysqlData/master/data2)定义主服务器配置文件

2021-11-04 10:36:19 204

原创 SpringBoot 集成多个 Elasticsearch 集群 bean

1.SpringBoot 项目首先在 pom.xml 中添加 ES 客户端依赖,这里 SpringBoot 使用的是 2.5.3 版本,默认会引入 ES 7.12.1 版本客户端,所以这里没有写版本号:<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId&

2021-11-03 19:12:26 612

原创 ES 安装 elasticsearch-sql插件

1、查看sql插件githubhttps://github.com/NLPchina/elasticsearch-sql2、安装1、cd elasticsearch #进入目录2、./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/5.4.3.0/elasticsearch-sql-5.4.3.0.zip3、下载SQL的Serverwget

2021-11-03 14:30:33 1670 1

原创 Elasticsearch-Sql+Mybatis+SpringBoot

本文介绍了springboot如何集成elasticsearch-sql+mybatis大家好!ElasticSearch(下面用es作为缩减)作为开源界搜索和数据分析的宠儿,受到了很多公司的青睐,无论是查询速度,还是扩展性,容错性都是很不错的,而且配合官方的logstash和kibana,以及filebeat,更是如虎添翼,但是es的transport client的api是解析非常困难,而且大家又习惯了sql语法,所以在es5.x版本以后已经有elasticsearch-sql的插件,在6.4版本以后

2021-11-03 14:18:17 1272

原创 es sql 集成 jdbc

使用 es jdbcpublic void testJDBC() throws Exception { Properties properties = new Properties(); properties.put("url", "jdbc:elasticsearch://127.0.0.1:9300/" + TestsConstants.TEST_INDEX); DruidDataSource dds = (DruidDataSource) Elasti

2021-11-03 14:13:13 248

原创 SpringBoot+Mybatis+Elasticsearch整合方案

1. 前言ES作为一个搜索工具,寄托于Lucene之上,提供了方便的数据存储和搜索服务,一般的用它来作为网页数据索引以及存储用户画像(即用户标签)数据,可以提供复具有复杂的查询条件的服务。例如在网页索引中,通过倒排的方式索引的方式,对文档进行分词存储,可以很快的定位关键字所在的文档,从而达到毫秒级的搜索效率;而在用户画像存储中,ES既可以作为标签宽表,提供类似HIVE宽表的特性,又可以达到传统关系型数据库或者HBase的实时查询的要求,所以在一般的用户画像存储中也是不二之选。ES是一个搜索工具,它提供的

2021-11-03 14:02:13 4402 1

原创 学习Semaphore和线程池

一、首先要明白Semaphore和线程池各自是干什么?信号量Semaphore是一个并发工具类,用来控制可同时并发的线程数,其内部维护了一组虚拟许可,通过构造器指定许可的数量,每次线程执行操作时先通过acquire方法获得许可,执行完毕再通过release方法释放许可。如果无可用许可,那么acquire方法将一直阻塞,直到其它线程释放许可。线程池用来控制实际工作的线程数量,通过线程复用的方式来减小内存开销。线程池可同时工作的线程数量是一定的,超过该数量的线程需进入线程队列等待,直到有可用的工作线程来执行

2021-11-02 11:32:21 481

原创 滑动时间窗口实现简单接口限流思路

标题本文目的在学习阿里开源框架sentinel后,为加深对滑动时间窗口的理解,故自己实现简单接口限流。标题SentinelSentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel的一切功能都是以流量统计为基础。基于滑动时间窗口实现秒级的流量统计。标题滑动时间窗口Sentinel以1秒为时间宽度,将1秒平均分隔成指定数量的时间窗口,任意的时间对应唯一的一个时间窗口,每

2021-11-02 11:05:18 393

原创 nacos 使用遇到的问题

1 boot 项目不能用,使用需要引入cloud依赖2 在aop 里不能用 ,会执行多次,因为aop 是被spring代理过,在nacos client 会多生成一个bean3 被刷新的类要加@RefreshScope 标记,才可以刷新4 注册地址和配置地址可以单独配置...

2021-11-01 19:49:57 244

原创 分布式事务总结(2)

随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章总结了分布式事务最经典的解决方案,分享给大家。◆ 基础理论在讲解具体方案之前,我们先了解一下分布式事务所涉及到的基础理论知识。我们拿转账作为例子,A 需要转 100 元给 B,那么需要给 A 的余额-100 元,给 B 的余额+100 元,整个转账要保证,A-100 和 B+100 同时成功,或者同时失败。看看在各种场景下,是如何解决这个问题的。◆

2021-10-29 10:56:12 174

原创 ES 向量检索 dense_vector 类型(官方文档没有这个介绍。)

ES 7.X 版本引入了向量类型dense_vector,用于存储浮点类型的密集向量,其最大维度为2048。其用作是可以将待查询向量和文档内存储向量之间的距离作为查询评分使用,即越相似的向量评分越高。使用方式为在 query 的script_score中指定向量的计算方式,具体有四种:cosineSimilarity – 余弦函数dotProduct – 向量点积l1norm – 曼哈顿距离l2norm - 欧几里得距离创建含有dense_vector的索引用于测试,建表如下:PUT cast

2021-10-28 10:40:16 1744

原创 Redis布隆过滤器学习

1. 布隆过滤器前言不知道从什么时候开始,本来默默无闻的布隆过滤器一下子名声大燥,在面试中面试官问到怎么避免缓存穿透,你的第一反应可能就是布隆过滤器,缓存穿透=布隆过滤器成了标配,但具体什么是布隆过滤器,怎么使用布隆过滤器不是很清楚,那今天我们就来把他说清楚,讲明白。。1.1 缓存穿透大家看下这幅图,用户可能进行了一次条件错误的查询,这时候redis是不存在的,按照常规流程就是去数据库找了,可是这是一次错误的条件查询,数据库当然也不会存在,也不会往redis里面写值,返回给用户一个空,这样的操作一次

2021-10-28 09:56:23 201

原创 es远程分词器代码

@RequestMapping("bbb") public void bbb(HttpServletResponse httpServletResponse) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); httpServletResponse.setDateHeader("Last-Modified",System.currentTimeMillis()+1); ..

2021-10-15 19:33:00 196

原创 图解Redisson分布式锁源码-可重入锁的八大机制-上

1、分享概要本次分享会先从Redis可重入锁最简单的Demo入手,一步一图分析Redis可重入锁底层的源码,在边看源码的过程中、边画出Redis可重入锁的核心流程图。通过这张核心的流程图,我们可以看到一个企业级的、基于Redis分布式锁的方案是怎样的形成的,在开始分享前,大家先思考下如下常见的面试题:1、客户端线程在底层是如何实现加锁的?2、客户端线程是如何维持加锁的?Redis可重入锁源码的分享,上半部分将重点围绕以上2个核心问题一步步展开分析,大家可以心中带着这几个问题一步步看下去,最后形成的

2021-10-12 17:18:57 277

原创 es java api 进行聚合+桶聚合查询

假设1个member有多个参加的meeting(会议),每个meeting可多次参加,每次参加对应一条参加时间和备注记录需求: 获取某个member的所有meeting的最新一条记录查询语句{ "query": { "term": { "memberid": "2136476" } }, "aggs": { "group": { "terms": { "field": "meetingid", "order":

2021-10-11 11:00:18 864

原创 Flume总结

1.Flume 采集数据会丢失吗?不会,Channel 存储可以存储在 File 中,数据传输自身有事务。2.Flume 与 Kafka 的选取?采集层主要可以使用 Flume、Kafka 两种技术。Flume:Flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展 API。Kafka:Kafka 是一个可持久化的分布式的消息队列。Kafka 是一个非常通用的系统。你可以有许多生产者和很多的消费者共享多个主题Topics。相比之下,Flume 是一个专用工具被设计为旨在往 H

2021-10-09 16:06:46 519

原创 prometheus监控 springboot 程序

1.关于PrometheusPrometheus是一个根据应用的metrics来进行监控的开源工具。相信很多工程都在使用它来进行监控,有关详细介绍可以查看官网:https://prometheus.io/docs/introduction/overview/。2.有关GrafanaGrafana是一个开源监控利器,如图所示。3.SpringBoot使用Prometheus3.1 依赖内容在SpringBoot中使用Prometheus其实很简单,不需要配置太多的东西,在pom文件中加入依赖,完

2021-10-09 09:28:43 178

原创 Impala sql语法

1.数据库特定语句1.创建数据库CREATE DATABASE语句用于在Impala中创建新数据库。CREATE DATABASE IF NOT EXISTS database_name;这里,IF NOT EXISTS是一个可选的子句。如果我们使用此子句,则只有在没有具有相同名称的现有数据库时,才会创建具有给定名称的数据库。impala默认使用impala用户执行操作,会报权限不足问题,解决办法:一:给HDFS指定文件夹授予权限hadoop fs -chmod -R 777 hdfs:/

2021-09-29 11:12:00 2107

原创 Sentinel选型

一、什么是SentinelSentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。官网:https://github.com/alibaba/Sentinel/wikiSentinel主要特性:Sentinel与Hystrix的区别关于Sentinel与Hystrix的区别见:https://yq.aliyun.com/articles/633786/总体来说:Hystrix常用的线程池隔离会造成线程上下切换的overhead比较大;Hyst

2021-09-28 17:03:02 106

原创 分布式事务的防悬挂,空回滚

一、TCC简介TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题;TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel 3个方法均由业务编码实现;其中Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消;如下图所示,业务实现TCC服务之后,该TCC服务将作为分布式事务的其中一个资源,参与到整个分布式事务中;事务管理器分2阶段协调TCC服务,在第一阶段调用所有TCC服务的Try方法,在

2021-09-24 17:23:33 6982 1

原创 基于Redis滑动窗口的接口限流

接口限流背景:在做网站的时候经常会遇到恶意访问或者被攻击的安全问题,从而导致服务器宕机或者影响网站正常运营。所以接口限流就应运而生了。基于redis的接口限流我们了解到redis中有着5种常见的数据类型,String、Hash、List、Set、ZSet,今天我们就要用到其中的ZSet来做接口限流这是比较简单的一种方式。其中ZSet中有一个方法,zcountzcount用法zcount 集合的名字 开始区间 结束区间 (作用:统计个区间内值的个数)思路我们将ZSet中集合的名字 设置为 li

2021-09-24 17:00:23 381

原创 分布式事务:空回滚、事务悬挂

空回滚:pre阶段超时,此时rollback事务悬挂:pre延时,rollback执行后,pre到达,然后执行了pre参考:https://kuaibao.qq.com/s/20180713A1ZFVR00?refer=spider

2021-09-24 16:58:52 1771

原创 Elasticsearch系列---生产集群重启问题

如果我们的Elasticsearch集群做了一些离线的维护操作时,如扩容磁盘,升级版本等,需要对集群进行启动,节点数较多时,从第一个节点开始启动,到最后一个节点启动完成,耗时可能较长,有时候还可能出现某几个节点因故障无法启动,排查问题、修复故障后才能加入到集群中,此时集群会干什么呢?假设10个节点的集群,每个节点有1个shard,升级后重启节点,结果有3台节点因故障未能启动,需要耗费时间排查故障,如下图所示:整个过程步骤如下:集群已完成master选举(node6),master发现未加入集群的no

2021-09-10 17:32:48 749 1

转载 3W字详细解析 ConcurrentHashMap 1.7和1.8源码,再也不用担心被面试官吊打了。

文章目录这篇文章,我打算从以下几个方面来讲。1)多线程下的 HashMap 有什么问题?2)怎样保证线程安全,为什么选用 ConcurrentHashMap?3)ConcurrentHashMap 1.7 源码解析底层存储结构常用变量构造函数put() 方法ensureSegment() 方法scanAndLockForPut() 方法rehash() 扩容机制get() 获取元素方法remove() 方法size() 方法是怎么统计元素个数的4)ConcurrentHashM

2021-04-12 17:51:46 158

转载 面试官再问你 HashMap 底层原理,就把这篇文章甩给他看

前言HashMap 源码和底层原理在现在面试中是必问的。因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合。文章较长,介绍了很多原理性的问题,希望对你有所帮助~目录本篇文章主要包括以下内容:HashMap 的存储结构常用变量说明,如加载因子等HashMap 的四个构造函数tableSizeFor()方法及作用put()方法详解hash()方法,以及避免哈希碰撞的原理resize()扩容机制及原理get()方法为什么HashMap链表会形成死循环,

2021-04-12 14:14:04 69

空空如也

空空如也

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

TA关注的人

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