{"repo":"childe/gohangout","free":true,"listed":false,"github":"https://github.com/childe/gohangout","clone":"git clone https://github.com/childe/gohangout.git","description":"使用 golang 模仿的 Logstash。用于消费 Kafka 数据，处理后写入 ES、Clickhouse 等。","language":"Go","stars":1102,"topics":["kafka","elasticsearch","logstash","golang"],"license":"MIT","category":"data-pipelines","readme_excerpt":"ENG 之前因为 logstash 处理数据的效率比较低, 用 java 模仿 Logstash 写了一个java版本的 https://github.com/childe/hangout. 不知道现在 Logstash 效率怎么样了, 很久不用了. 后来因为Java的太吃内存了, 而且自己对java不熟, 又加上想学习一下golang, 就用golang又写了一次. 内存问题得到了很大的缓解. 目前我们使用golang版本的gohangout每天处理2000亿条以上的数据. 创建一个 QQ 群交流吧 安装 从源码编译 使用 go module 管理依赖. 直接 make 就可 make go get go get github.com/childe/gohangout docker 镜像地址 https://hub.docker.com/r/rmself/gohangout 第三方 Plugin 使用 Plugin 的话，自己编译一下，将 CGO ENABLED 打开： CGO ENABLED=1 - 开发 Plugin 的例子 gohangout-plugin-examples - 使用sarama 的Kafka Input - 使用 confluent-kafka-go 的Kafka Input - 使用kafka-go 的Kafka Input - Redis Input - Split Filter 一条消息Split 成多条 - Dissect Filter - File Output 输出到文件 - zinc Output 输出到zinc - pulasr input 运行 gohangout --config config.yml 一个简单的配置文件如下，从标准输入读取数据，输出到标准输出。具体的配置说明见 配置一节 日志 日志模块使用 k8s.io/klog/v2 , 几个常用参数如下: - -logtostderr 日志打印出标准错误 - -v 5 设置日志级别. 我这边一般设置到 5. 如果要看更详细的日志, 可以设置到 10 或者20 pprof debug - -pprof=true (默认是不开启 pprof的) - -pprof-address 127.0.0.1:8899 pprof 的http地址 prometheus metrics 运行时加参数 --prometheus 0.0.0.0:2112 ，可以开一个 prometheus 监听服务。 在 Input/Output/Filter 里面配置 prometheus counter 如下例子表示，如果数据通过 if 条件，则此 Add Filter 的计数加 1。 注意，多个 counter 使用同样的配置可能会 Panic 多线程处理 默认是一个线程 --worker 1 使用一个线程(goroutine)处理数据. 每个线程拥有自己的filter, output. 比如说translate filter, 每个线程有自己的字典, 他们占用多份内存. elasticsearch output也是一样的, 如果每个 elasticsearch 设置了2并发, 那一共就是8个并发. 进一步说明一下为什么添加了这个配置: 如果一个 Kafka Topic 只有一个分区，那最多只有能有一个 Gohanout 去消费。因为后续的数据处理流程都在一个线程中，可能会有 CPU 瓶颈（比如 Grok 正则匹配等），这种情况下，可以通过增加 worker 提升数据处理能力。","default_branch":null,"files":null,"tree":[],"storefront":"/r/childe","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/childe/gohangout/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}