文档章节

Linkedin Burrow

China_OS
 China_OS
发布于 2017/03/28 14:32
字数 1709
阅读 372
收藏 1

介绍

    Burrow是linkedin开源的一个监控Apache Kafka的工具,burrow可以将消费者滞后检查作为一项服务来对外提供。 它监视所有消费者的承诺偏移量,并根据需要计算消费者的状态,提供HTTP endpoint接口来获取消费者状态,能够监控Consumer消费消息的延迟,从而监控应用的健康状况,并且可以同时监控多个Kafka集群。 通知器可以通过配置电子邮件或HTTP通告进行告警,而无需指定阈值。

环境准备

    gpm安装

cd /opt/programs
git clone https://github.com/pote/gpm.git
cd gpm
git checkout v1.4.0 
./configure
make install

    gpm验证   

        

    go安装

cd /opt/programs
wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
tar zxvf go1.8.linux-amd64.tar.gz -C go

    go环境设置

export GOROOT=/opt/programs/go
export GOPATH=/root/go
export PATH=$PATH:$GOROOT/bin

    go验证

部署

    编译burrow

go get github.com/linkedin/Burrow
cd /root/go/src/github.com/linkedin/Burrow
gpm install
go install

        ps:如果golang的环境变量设置没什么问题,编译过程应该是很顺利的。

    部署burrow

        burrow的部署很简单,只要拷贝/root/go/bin目录和/root/go/src/github.com/linkedin/Burrow/config目录到部署机器即可。

配置

    burrow.cfg

        burrow配置文件主要由多个配置段组成:

  1. [general]配置中包含了日志文件的位置和PID文件,以及一些kafka集群的共享配置。
  2. [zookeeper]配置指定一个Zookeeper集合,以便在多个Burrow副本之间提供锁定,这允许您随时运行多个Burrow副本,只允许一个副本执行通知程序。
  3. [kafka]配置指定了burrow连接和监控的单个kafka集群,子标题"local"是用于在HTTP请求和响应中标识的Kafka集群的名称,可以指定多个[kafka]子标题,以便为一个Burrow实例监视许多Kafka群集
  4. [storm]配置指定一个单一的Storm集群,用于通过Zookeeper偏移量进行监视。子标题"local"是此Storm集群映射到的Kafka集群的名称,用于在HTTP请求和通知中标识它。 可以指定多个子标题来提供一个Burrow实例来监视许多Storm群集。
  5. [notify]设置关于通知中心的配置
  6. [tickers]设置关于执行某些操作的频率的配置。
  7. [lagcheck]配置设置关于内部滞后检查算法的配置。
  8. [httpserver]配置burrow的HTTP endpoint
  9. [Notifiers]用于在消费者组处于不良状态时将电子邮件发送到指定的地址。可以为单个电子邮件地址配置多个组,并且可以根据每个电子邮件地址配置检查状态的时间间隔。可以在burrow配置文件中配置多个email通知,每个通知有自己的配置段,必须将enable=true通知器才能执行,必须在子标题部分指定发送email通知的地址
[general]
#日志目录,非必填项,包含了日志文件和PID文件
logdir=log
#日志配置文件,非必填项,指定了记录日志的格式
logconfig=config/logging.cfg
#PID文件名称,非必填项,里面包含了进程PID
pidfile=burrow.pid
#kafka client ID,非必填项,当消费kafka消息时,提供给kakfa集群的消费者ID,这遵循与topic名称相同的规则
client-id=burrow-lagchecker
#正则表达式,非必填项,如果消费者group匹配这个正则,则忽略
group-blacklist=^(console-consumer-|python-kafka-consumer-).*$

[zookeeper]
#zookeeper地址,必填项,多个主机条目可以提供更好的冗余, hostname OR hostname:port
hostname=zkhost01.example.com
hostname=zkhost02.example.com
hostname=zkhost03.example.com
#zookeeper的端口,非必填项,默认2181
port=2181
#超时时间,非必填项,连接zookeeper的超时时间
timeout=6
#znode地址,非必填项,一个znode的全路径,用于在多个burrow实例之间进行锁定,如果不存在会自动创建
lock-path=/burrow/notifier

[kafka "local"]
#broker地址,必填项,多个主机条目可以提供更好的冗余,hostname OR hostname:port
broker=kafka01.example.com
broker=kafka02.example.com
broker=kafka03.example.com
#broker端口,非必填项,默认9092
broker-port=10251
#zookeeper地址,必填项,多个主机条目可以提供更好的冗余,hostname OR hostname:port
zookeeper=zkhost01.example.com
zookeeper=zkhost02.example.com
zookeeper=zkhost03.example.com
#zookeeper端口,非必填项,默认2181
zookeeper-port=2181
#znode地址,必填项,一个znode的全路径。
zookeeper-path=/kafka-cluster
#zookeeper偏移量收集是否开启,非必填项,默认false
zookeeper-offsets=true
#offsets的topic,非必填项,默认__consumer_offsets
offsets-topic=__consumer_offsets

[storm "local"]
#zookeeper地址,必填项,多个主机条目可以提供更好的冗余,hostname OR hostname:port
zookeeper=zkhost01.example.com
zookeeper=zkhost02.example.com
zookeeper=zkhost03.example.com
#zookeeper端口,非必填项,默认2181
zookeeper-port=2181
zookeeper-path=/storm-cluster

[notify]
#检查consumergroup状态的时间间隔
interval=10

[tickers]
#多久刷新一次broker HEAD在所有partitions的偏移量,秒
broker-offsets=60

[lagcheck]
#多少个consumer的偏移量存储在partition,这决定了评估消费者滞后的窗口
intervals=10
#在消费者停止提交偏移量以从Burrow的监视中删除之后,等待几秒钟。
expire-group=604800
#消费者偏移提交之间允许的最小间隔(秒),在此间隔内的提交将被忽略。
min-distance=1
#如果配置了zk保存cluster的offsets,则多久扫描一次Zookeeper来检查偏移量
zookeeper-interval=60
#刷新Zookeeper里面的消费者列表的频率。
zk-group-refresh=300

[httpserver]
#是否开启HTTP server,默认false
server=on
#HTTPS server监听的端口
port=8000
; Alternately, use listen
; listen=host:port
; listen=host2:port2

[smtp]
#邮件服务器地址
server=mailserver.example.com
#邮件服务器端口
port=25
#认证类型,如果没auth则是空,plain这是明文的用户和密码
auth-type=plain
username=emailuser
password=s3cur3!
#发邮件的地址
from=burrow-noreply@example.com
#邮件模板
template=config/default-email.tmpl
[emailnotifier "bofh@example.com"]
#两个逗号分隔的字符串,第一个字符串表示kafka集群名称(上文定义的),第二个字符串表示监控那个consumer group
group=local,critical-consumer-group
group=local,other-consumer-group
#检查consumer group的时间间隔
interval=60
#是否开启email通知
enable=true

    http api

        用户主要通过http api接口来查看consumer的信息,主要有以下接口:

  1. 健康检查:/burrow/admin
  2. 列出kafka集群:/v2/kafka
  3. 列出zk集群:/v2/zookeeper
  4. 列出单个kafka集群的详情:/v2/kafka/(cluster)
  5. 列出单个kafka集群的消费者:/v2/kafka/(cluster)/consumer
  6. 删除某个kafka集群的消费者group:/v2/kafka/(cluster)/consumer/(group)
  7. 列出单个kafka集群某个消费者group的topic:/v2/kafka/(cluster)/consumer/(group)/topic
  8. 列出单个kafka集群某个消费者group的topic详情:/v2/kafka/(cluster)/consumer/(group)/topic/(topic)
  9. 返回仅包含处于不良状态的分区的对象:/v2/kafka/(cluster)/consumer/(group)/status 
  10. 返回包含消费者的所有分区的对象,而不管分区的评估状态如何:/v2/kafka/(cluster)/consumer/(group)/lag
  11. 列出单个kafka集群的topic:/v2/kafka/(cluster)/topic
  12. 列出单个kafka集群的单个topic详情:/v2/kafka/(cluster)/topic/(topic)

测试

© 著作权归作者所有

China_OS
粉丝 427
博文 463
码字总数 519985
作品 0
静安
技术主管
私信 提问
加载中

评论(3)

wei-chan
wei-chan
fatal: unable to access 'https://github.com/linkedin/burrow/': Peer reports incompatible or unsupported protocol version.
package github.com/linkedin/burrow: exit status 128
[root@novalocal .ssh]#
wei-chan
wei-chan
执行 go get github.com/linkedin/Burrow 时候会报上面的错误,有遇到吗?
China_OS
China_OS 博主
不会的 看起来像被墙
Kafka 消费迟滞监控工具 Burrow

Kafka 官方对于自身的 LAG 监控并没有太好的方法,虽然Kafka broker 自带有 kafka-topic.sh, kafka-consumer-groups.sh, kafka-console-consumer.sh 等脚本,但是对于大规模的生产集群上,使...

Professor哥
2018/05/22
0
0
Agriya’s most dynamic iPhone native app of burrow script is at your service

These days, mobile savvy generations are expecting to get things done within a few touches in their iPhones. Indeed, entrepreneurs and businessmen like you have to gratify the u......

Leenajose
2015/08/20
1
0
Kafka 状态信息监视器--burrowx

burrowx 是一个简单、轻量的 Kafka 状态信息监视器,目前使用 influxdb 存储指标。burrowx 受到 Burrow 的启发,但比它更快、更干净和更稳定。burrowx 是 influxdb 和 grafana 的良好整合。 ...

sundy-li
2017/08/08
692
0
Kafka 消费者滞后检查--Burrow

Burrow是一个基于Apache Kafka的监控助手,为消费者提供滞后检查作为服务,而不需要指定的阈值。它可以监视所有消费者提交的偏移,并计算这些消费者的需求状况。 特性 没有阈值 多Kafka集群支...

匿名
2016/10/17
789
1
私有区块链Hyperledger Fabric和公共区块链ARK.io如何通过solidity智能合约结合

我想展示如何将公共区块链(如ARK.io)的功能与私有区块链(如Hyperledger)结合起来。特别是,我们将看到ARK.io上的交易如何触发在Hyperledger Fabric + Burrow中部署的Solidity Smart Cont...

笔阁
05/14
11
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.7K
21
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
3
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部