记录 ES 使用分页查询的几种方式
摘自:https://cloud.tencent.com/developer/article/2110964 ES 支持的三种分页查询方式 From + Size 查询 Search After 查询 Scroll 遍历查询 「说明:」 官方已经不再推荐采用Scroll API进行深度分页。如果遇到超过 10000 的深度分页,推荐采用search_after + PIT。 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/paginate-search-results.html。 分布式系统中的深度分页问题为什么分布式存储系统中对深度分页支持都不怎么友好呢? 首先我们看一下分布式存储系统中分页查询的过程。 假设在一个有 4 个主分片的索引中搜索,每页返回10条记录。 当我们请求结果的第1页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点 ,协调节点对 40 个结果排序得到全部结果的前 10 个。 当我们请求第 99 页(结果从 990 到 10...
ES 分享会:从倒排索引到生产实践
ES 分享一. 建立倒排索引的认识 倒排索引是一种索引方法,用来存储全文搜索下某个单词在文档中的位置映射。 以古诗问答为例来理解倒排索引: 问:说出带"前"字的古诗词 问:背一下李白的《静夜思》—— 窗前明月光,疑是地上霜 背诗的方式:按书中排列顺序,先记诗名再记内容 具象化到关系库模型: 在脑子中形成的索引是这样的: 建立了 name 的索引后,根据 name 找 content 就会很快(SELECT * FROM 古诗 WHERE name = '静夜思'),但反过来查包含某字的诗就变成全表扫描(SELECT name FROM 古诗 WHERE content LIKE '%前%')。 如果以"前"字作为索引,则可以解决这个问题: 但整首 20 字的古诗每个字都适合做索引,光唐诗就有 5 万多首,全部建索引不现实。由于已经可以通过诗名回忆整首诗,所以只需索引到诗名即可: 多首诗的情况: 以上就是倒排索引的入门讲解。 补充: ES 默认对全部字段建立索引,如古诗表中 ...
记录 Docker 集群部署 ES 7.x
三台机器 192.168.56.105 192.168.56.106 192.168.56.107 前置准备(防止 JVM 报错)12345sysctl -w vm.max_map_count=262144#只是测试,所以临时修改,永久修改使用下面echo vm.max_map_count=262144 >> /etc/sysctl.confsysctl -p es-node1 1234567891011121314151617181920212223242526272829# 集群名称,相同名称为一个集群cluster.name: elasticsearch-cluster# 节点名称,集群模式下每个节点名称唯一node.name: es-node1# 监听地址,用于访问该es,0.0.0.0代表不限制network.host: 0.0.0.0# 表示这个节点是否可以充当主节点node.master: true# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip)network.publish_host: ...
关于DataRowException, internal schema representation is probably ...异常的调试记录
异常:DataRowException, internal schema representation is probably out of sync with real database schema 起初异常信息打印的不全,浑然不知,后来在打印信息里发现 Flink 并没有打印出应该打印的日志,查了之后发现是缺少依赖包。加上: 1234567<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> <!-- 注意,若无type为jar则报错--> <type>jar</type></dependency> 全部异常信息 1234567891011121314151617181920212223242526272829303132333435ERROR io...
Flink ES Connector 7 - ElasticsearchSink
截至1.13.1,官方文档所提供的方式已经废弃12345678910111213141516171819202122232425262728293031HttpHost httpHost = new HttpHost(esHost, esPort, esScheme);List<HttpHost> httpPosts = new ArrayList<>();httpPosts.add(httpHost);RestClientFactory restClientFactory = new RestClientFactory() { @Override public void configureRestClientBuilder(RestClientBuilder restClientBuilder) { CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCr...
Flink 简述
Flink什么是Flink?优势是什么,为什么选择Flink?ApacheFlink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink被设计为在所有通用集群环境中运行,以内存速度和任何规模执行计算。 经典的MapReduce程序 算子的概念:可以并行执行的方法称之为算子。 hadoop:在MR程序执行时,基本上每一次的数据交换都会读写磁盘。在复杂的业务逻辑下,由于执行的job任务多造成多次的磁盘读写,严重的影响了计算的时效性。这就是第一代计算框架hadoop的不足。 Tez:Tez是一个Hive的运行引擎,优化业务之间的读写磁盘次数,性能优于MR。 Spark:Spark的设计模式是读取集群中的数据后,在内存中存储和运算,直到全部运算完毕后,再存储到集群中。 Flink:在批处理的性能与Spark是差不多的,在底层设计的模式上Spark是以批处理为出发点,流是批处理的一种特例,Flink是以流处理为出发点,批处理是流的一种特例。 总结:在处理的的效率上MR的计算方式基本上被淘汰了。在批处理方面Spark&Flink性能是差不...
flink问题:esotericsoftware.kryo.serializers.CollectionSerializer.read NullPointerException
(flink)问题:esotericsoftware.kryo.serializers.CollectionSerializer.read NullPointerException 异常如下 123456789101112131415161718192021222324252627282930313233com.esotericsoftware.kryo.KryoException: java.lang.NullPointerExceptionSerialization trace:values (org.apache.avro.generic.GenericData$Record) at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125) at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528) at com.esotericsoftware...
记一次利用Semaphore处理大批次数据计算的解决方案
先描述下信号量的意义 1234567891011Semaphore是一个计数信号量。 在概念上,信号量维持一组许可证。如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它。 每个release()添加许可证,潜在地释放阻塞获取方。但是,没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。 信号量通常用于限制线程数,而不是访问某些(物理或逻辑)资源。在这里插入图片描述Semaphore实现的功能就类似有3个停车位,假如有6个人要停车,那么同时只能停多少辆车?同时只能有3个人能够占用,当3个人中 的任何一个人开车离开后,其中等待的另外3个人中又有一个人可以来停车了。另外等待的2个人中可以是随机获得优先机会,也可以是按照先来后到的顺序获得机会,这取决于构造Semaphore对象时传入的参数选项。单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场合。 批量处理集合 util12345678910111213141516171819202122...
记录 Flink 结合 Docker 部署配置
首先安装flink,这里以1.13.1举例(docker安装的话,jobmanager和taskmanager需要分开部署)flink-docker-github-repository (这个参数flink文档中没找到)关于query.server.port: 6125不用去管,这个不填也会默认自动生成: yml中的内容不说了, 下面贴几张关于 Flink 生产配置最佳实践的图,钉钉公开课趣头条实时平台负责人分享:https://www.bilibili.com/video/BV1iE411r7S6 Flink在yarn上运行,每个TaskManager的slot个数怎么设置?经验公式:slot个数tm个数=并行度并行度=kafka的分区个数(10分区)slot的个数要小于yarn设置的单个container最大可以申请的cpu核数(5个 8-36个)。那么就是 5个slot2个tm=并行度=kafka分区数多个小集群好还是一个大集群好?1.小集群的话任务分布在不同的集群,任务之间的影响小。不会因为一个任务占用...
记录 Flink 的安装及简单使用
先查看centos中自带的jdk并卸载 1234567[root@root ~]# rpm -qa | grep java //查看tzdata-java-2016c-1.el6.noarchjava-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64[root@root ~]# rpm -e --allmatches --nodeps java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64 //卸载[root@root ~]# rpm -e --allmatches --nodeps java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64 //卸载[root@root ~]# rpm -qa | grep java //再次查看 开发版openjdk(非开发版还需单独额外安装jps等工具) 1yum install -y java-1.8.0-o...
