gohangout  - golang 版本的仿 Logstash 应用

rquis 17天前

golang 版本的 hangout,有效缓解内存问题。

hangout 是一款仿 Logstash 的应用,用 java 实现了 Logstash 的几个常用 input/filter/output,用于提升数据处理效率。

安装

可以从源码编译, 或者是直接下载二进制可执行文件

从源码编译

使用 go module 管理依赖. 直接 make 就可

make

为避免编译后gohangout在docker容器中无法正常启动,推荐使用完整编译命令进行编译,如:

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 make

下载编译后二进制文件

https://github.com/childe/gohangout/releases 直接下载

go get

go get github.com/childe/gohangout

运行

gohangout --config config.yml

日志

日志模块使用 github.com/golang/glog , 几个常用参数如下:

  • -logtostderr 日志打印出标准错误

  • -v 5 设置日志级别. 我这边一般设置到 5 , 数字越大, 日志级别越详细.

pprof debug

  • -pprof=true (默认是不开启 pprof的)

  • -pprof-address 127.0.0.1:8899 pprof 的http地址

多线程处理

默认是一个线程

--worker 4

使用四个线程(goroutine)处理数据. 每个线程拥有自己的filter, output. 比如说translate filter, 每个线程有自己的字典, 他们占用多份内存. elasticsearch output也是一样的, 如果每个 elasticsearch 设置了2并发, 那一共就是8个并发.

进一步说明一下为什么添加了这个配置:

最开始是没有这个配置的, 如果需要多线程并发处理数据, 依赖 Input 里面的配置, 比如说 Kafka 配置 topicname: 2 就是两个线程去消费(需要 Topic 有至少2个Partition, 保证每个线程可以消费到一个 Partition 里面的数据).

但是后面出现一些矛盾, 比如说, Kafka 的 Consumer 个数多的情况下, 给 Kafka 带来更大压力, 可能导致 Rebalance 更频繁等. 所以如果 Kafka 消费数据没有瓶颈的情况下, 希望控制尽量少的 Consumer, 后面多线程的处理这些数据.

开发新的插件

 
    公告

    《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

    课程地址:https://www.shiyanlou.com/courses/1436
    9折优惠邀请码: ZHwfIjb1

    该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。