优化ElasticSearch写入效率

最近在做日志搜集系统,涉及到Kafka到ES的数据解析写入,但是Kafka的写入效率远远高于ES,造成大量的数据在Kafka中积累,且ES的数据更新非常缓慢,最终造成了在Kibana中查询的时候发现,ES中的数据有接近9个小时的数据延迟,这显然是不可接受的。因此,必须着手优化ES的写入效率。在尽可能不改变已有配置的情况下,写入效率优先可以考虑以下两点。

必须使用bulk方式提交写入数据

一开始我们的解析器是通过单条数据的形式提交的数据,很明显这种方式在大数据量的时候就越来越慢,因此我们必须修改为批量提交的方式。ES的bulk提交有个限制就是一次性提交的数据量不能超过15MB,因此,在考虑一次性提交多少条数据比较合适的时候,这个参数无比重要。根据分析,我们目前的数据量一次性bulk提交5000条数据比较合适,约为5-6MB的样子。当然不是越多越好,也不是满满地一定要达到15MB的限制,那样的风险太大,对于我们来讲,能够提升速率满足需求即可。并且我们的程序优化过后能够满足随时根据参数调整bulk请求数量的消息数量大小。我们的k8s中对应的容器配置是这样的:

Continue reading “优化ElasticSearch写入效率”

free命令在Ubuntu16.04之后的差别

I noticed that the  free command reporting has changed somewhere between Trusty and Xenial. Here is what `free -m’ shows on one of my Trusty computers:

Here is the equivalent on (a different) Xenial system:

The +/- buffers/cache line, which I mainly used to look at, is gone. How should I interpret the new numbers?

  • Does Mem used/free include buffers and cache or not?
  • Which numbers are the equivalent of the used and free numbers on the “+/- buffers/cache” line of the earlier version?

Continue reading “free命令在Ubuntu16.04之后的差别”

Nginx反向代理

示例

Continue reading “Nginx反向代理”

ProtoBuf安装及使用

ProtoBuf: 是一套完整的 IDL(接口描述语言),出自Google,基于 C 进行的实现,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(Golang、Python、Java 等)的接口代码,本篇只讲述 Golang 的基础操作。据说 ProtoBuf 所生成的二进制文件在存储效率上比 XML 高 3~10 倍,并且处理性能高 1~2 个数量级,这也是选择 ProtoBuf 作为序列化方案的一个重要因素之一。 Continue reading “ProtoBuf安装及使用”

安装gRPC运行环境

安装官方安装命令:

是安装不起的,会报:

原因是这个代码已经转移到github上面了,但是代码里面的包依赖还是没有修改,还是 google.golang.org 这种地址,

所以不能使用go get的方式安装,正确的安装方式:

Continue reading “安装gRPC运行环境”

Kubernetes通过ConfigMap构建“配置管理中心”

我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等。而我们的一个应用程序从写第一行代码开始,要经历开发环境、测试环境、预发布环境只到最终的线上环境。而每一个环境都要定义其独立的各种配置。如果我们不能很好的管理这些配置文件,你的运维工作将顿时变的无比的繁琐。为此业内的一些大公司专门开发了自己的一套配置管理中心,如360的Qcon,百度的disconf等。kubernetes也提供了自己的一套方案,即ConfigMap。kubernetes通过ConfigMap来实现对容器中应用的配置管理。 Continue reading “Kubernetes通过ConfigMap构建“配置管理中心””