使用zookeeper获取brokers的信息
使用zookeeper获取brokers的信息
Table of Contents
- 1. 在ArchLinux上安装libzookeeper
- 2. include 头文件
- 3. 现在编写代码
- 4. 运行程序
- 5. 后续要解决
1 在ArchLinux上安装libzookeeper
yaourt -S libzookeeper
这样会安装最新版本3.4.7-1, 由于 3.4客户端兼容3.3 server,所以应该问题不大。如果不幸,可以下载源代码自己编译。
2 include 头文件
上面的方式会将头文件安装到/usr/include/zookeeper/目录
#include <zookeeper/zookeeper.h>#include <zookeeper/zookeeper.jute.h>
3 现在编写代码
读取zookeeper的例子来源于rdkafkazookeeperexample.c(0.8 branch), 为了和C++代码一起使用做了修改。 这是main函数的部份代码。
int main (int argc, char **argv) { /* * Process kill signal, quit from the loop */ signal(SIGINT, sigterm); signal(SIGTERM, sigterm); /* * Create configuration objects */ RdKafka::Conf * global_conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL); RdKafka::Conf * topic_conf = RdKafka::Conf::create(RdKafka::Conf::CONF_TOPIC); /** Initialize zookeeper */ string zookeeper("localhost:2181"); zhandle_t * zh = initialize_zookeeper(zookeeper); /* * Set configuration properties */ char brokers[1024]; set_brokerlist_from_zookeeper(zh, brokers); string errstr; cout << "brokers from zookeeper is: " << brokers << endl; global_conf->set("metadata.broker.list", brokers, errstr);
几个C函数代码实现
#include "librdkafka/rdkafka.h" /* for Kafka driver */#include <zookeeper/zookeeper.h>#include <zookeeper/zookeeper.jute.h>#include <jansson.h>using std::string;using std::list;using std::cout;using std::endl;static bool run = true;static bool exit_eof = true;static rd_kafka_t *rk;#define BROKER_PATH "/brokers/ids"static void set_brokerlist_from_zookeeper(zhandle_t *zzh, char *brokers) { if (zzh) { struct String_vector brokerlist; if (zoo_get_children(zzh, BROKER_PATH, 1, &brokerlist) != ZOK) { fprintf(stderr, "No brokers found on path %s\n", BROKER_PATH); return; } int i; char *brokerptr = brokers; for (i = 0; i < brokerlist.count; i++) { char path[255], cfg[1024]; sprintf(path, "/brokers/ids/%s", brokerlist.data[i]); int len = sizeof(cfg); zoo_get(zzh, path, 0, cfg, &len, NULL); if (len > 0) { cfg[len] = '\0'; json_error_t jerror; json_t *jobj = json_loads(cfg, 0, &jerror); if (jobj) { json_t *jhost = json_object_get(jobj, "host"); json_t *jport = json_object_get(jobj, "port"); if (jhost && jport) { const char *host = json_string_value(jhost); const int port = json_integer_value(jport); sprintf(brokerptr, "%s:%d", host, port); brokerptr += strlen(brokerptr); if (i < brokerlist.count - 1) { *brokerptr++ = ','; } } json_decref(jobj); } } } deallocate_String_vector(&brokerlist); printf("Found brokers %s\n", brokers); }}static void watcher(zhandle_t *zh, int type, int state, const char *path, void *watcherCtx){ char brokers[1024]; if (type == ZOO_CHILD_EVENT && strncmp(path, BROKER_PATH, sizeof(BROKER_PATH) - 1) == 0) { brokers[0] = '\0'; set_brokerlist_from_zookeeper(zh, brokers); if (brokers[0] != '\0' && rk != NULL) { rd_kafka_brokers_add(rk, brokers); rd_kafka_poll(rk, 10); } }}static zhandle_t* initialize_zookeeper(string const& zookeeper) { zhandle_t * zh = zookeeper_init(zookeeper.c_str(), watcher, 10000, 0, 0, 0); if (zh == NULL) { fprintf(stderr, "Zookeeper connection not established."); exit(1); } return zh;}
4 运行程序
可以看到打印出从zookeeper中读取到的broker list, broker之间用,隔开
brokers from zookeeper is: localhost.localdomain:9093,localhost.localdomain:9094
5 后续要解决
读取topic的partition等信息,能够自动获取所有partition的消息。
Created: 2016-05-02 Mon 11:04
Validate
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
使用zookeeper获取brokers的信息相关推荐
- Node ZooKeeper 服务发现获取服务节点信息并发送请求
公司服务治理需通过 ZK 来做服务发现,Java都被集成,有封装好的包,直接注释器调用即可.Node还需自己手搓. 1. node-zookeeper-client 包连接 ZK 官方文档:https ...
- 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试
在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...
- uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...
同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...
- iphone adb android,通过ADB获取Android手机信息
1.获取手机体系信息(CPU,厂商名称等) adbshell"cat/system/build.prop|grep"product"" 2.获取手机体系版别 a ...
- 获取BT节点信息bittorrent-discovery
2019独角兽企业重金招聘Python工程师标准>>> 获取BT节点信息bittorrent-discovery BT/磁力都是常见的P2P下载方式.用户作为一个节点node从其他用 ...
- python 客户端 如何获取手机_Python学习---Django的request扩展[获取用户设备信息]
关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS ...
- 如何在系统崩溃时从C++中获取函数调用栈信息?
这篇文章主要讲述在 Linux 和 Windows 这 2 个平台上,如何用C++ 来捕获函数调用栈里的信息. 一.前言 程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些 ...
- MySQL SHOW TABLE STATUS 获取表的信息
show table status 获取表的信息 show table status like 'tableName' 1.Name 表名称 2.Engine: 表的存储引擎 3.Version: 版 ...
- Java获取异常堆栈信息
Java获取异常堆栈信息 参考文章: (1)Java获取异常堆栈信息 (2)https://www.cnblogs.com/zhi-leaf/p/6288769.html 备忘一下.
最新文章
- Python爬虫项目--爬取某宝男装信息 附带源码
- freemarker模板最小案例实现
- Angular rxjs operators 笔记
- aspx转发php_asp,php,aspx一句话合集
- Java ClassLoader getSystemClassLoader()方法与示例
- Linux桌面版横评:一、评测背景
- VK Cup 2018 Round 2: B. Three-level Laser(二分)
- java 选取topn_取Oracle中实现TOPN,选取前几条记录
- delphi获取本地外网ip_中小企业网络架构:内网安全部署之DHCP,防止恶意DHCP与IP冲突...
- 导入数据库sql 文件乱码
- 宾馆客房管理系统Mysql数据库课程设计
- 触动精灵 获取外网IP
- zabbix为啥持续报警
- RC电路的充放过程C语言实现,一文讲解RC电路耦合、相移、滤波、微分、积分......
- snmp-cmds:最简单的调用 Net-SNMP 二进制文件作为子进程的库可移植python SNMP 库
- java如何设置成中文字体,Java程序中文字体配置
- 批量提取 srt 字幕文件中的文字
- 使用 Minio Client 访问滴滴云 S3 对象存储
- JavaScript:对于成绩大于60分的,输出‘合格‘。低于60分的,输出‘不合格‘(使用switch语句)
- oracle中 包,Oracle 中包的应用
热门文章
- 使用特网云云主机的最显着原因之一
- 景安服务器密码修改,[景安网络]提示页
- 射频微电子学自存笔记
- buildroot ERROR: No hash found for xxx
- 网线制作ppt_网线制作PPT课件.ppt-资源下载在线文库www.lddoc.cn
- 关于POS接口配置的几个注意事项
- 百度地图API写的标记点点击跳动,当点击下一个标记点时停下上一个标记点的跳动
- 币圈人警惕!5大错误足以摧毁你的一切
- 动态壁纸安卓_这款安卓手机动态壁纸也太好看了吧
- 怎么弄计算机题的空缺排名,2015年计算机一级msoffice考前选择题练习40道