【FusionInsight Elasticsearch二次开发最佳实践】二次开发建议
集群安装为安全版,则需要保证客户端与服务端的时间一致
如果集群为安全版,需要进行kerberos认证,则需要服务端与客户端的时间一致,时间一致需要注意时区之间的时差的转换。如果时间不一致,会导致客户端认证失败,后续业务流程无法执行。
在应用程序结束之前调用Client的关闭函数
使用批量请求,设置合理的数据条数
当前集群的最佳批量请求大小,可以从5MB开始测试,缓慢增加这个大小,直到写入性能不能提升为止。
使用bulk命令进行批量索引数据时,每批次提交的数据大小为5~15MB。
比如每条数据大小为1k,那么建议批量提交的数据条数为5000条。
每个批量请求中只处理一个索引的数据
一个bulk请求只写入一个索引的数据,不建议一个bulk请求同时写入多个索引的数据,不同索引的数据分多个bulk请求提交。
使用多线程方式并发索引数据
比如32核的主机,可设置线程数为30~60个。应用程序使用多线程并发索引数据,推荐的并发线程数为主机CPU核数的1~2倍。
运行多个客户端并发执行任务
客户端配置多个EsNode实例的IP和Port列表
建议所有的EsNode实例的IP和Port都配置在客户端IP列表中。客户端需要配置多个EsNode实例的IP和Port列表,实现负荷分担和负载均衡,避免单EsNode性能瓶颈。
客户端禁止配置EsMaster节点的IP和Port
EsMaster实例为重要的管理进程,为确保Elasticsearch集群稳定性,不允许在客户端的IP列表中配置EsMaster节点IP和Port。
分配足够多的堆内存给EsMaster和EsNode实例
设置Xmx不要大于物理内存的50%,用来确保有足够多的物理内存预留给操作系统缓存。若机器内存的50% > 实例数*30G,设置为30G,否则设置为机器内存的50%/实例数。
不要设置Xmx超过JVM用来压缩对象指针的cutoff(compressed oops),精确的cutoff可能不同,但接近于31G,因此最大设置为30G。
Elasticsearch创建索引建议
为了减少索引数量并避免非常庞大的映射,请考虑将相同索引结构的数据存储在相同的索引中。
避免将不相关的数据放在同一个索引中,以避免稀疏,将这些文件放在不同的索引中通常会更好。
合理规划索引的Shard数
主分片个数一旦确定,就不可以更改。副本分片个数可以根据需要随时修改。
每个分片都可以处理索引和查询请求,在设定分片数目时,可从以下几个方面考虑:
建议单个分片保存的数据量在10~20GB左右,最大不超过30GB。
根据索引预计承载的最大数据容量和单个分片容量确定主分片个数。
为了提升数据可靠性,合理设置副本分片个数,至少设置为1,如果集群的存储空间足够,推荐设置为2。
不要返回大的结果集
Elasticsearch被设计为一个搜索引擎,这使得它非常擅长获取与查询匹配的最优文档,但是不适合用来检索与特定查询匹配的所有文档。Elasticsearch为了避免深分页,不允许使用分页(from&size)查询10000条以后的数据,如果需要这样做,请确保使用Scroll API。
安装EsClient实例
对于读写业务量较大的Elasticsearch集群,建议安装3~10个EsClient实例。
- 点赞
- 收藏
- 关注作者
评论(0)