gohangoutgolang 版本的仿 Logstash 应用

联合创作 · 2023-09-18 20: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, 后面多线程的处理这些数据.

开发新的插件

 
浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报