使用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的信息相关推荐

  1. Node ZooKeeper 服务发现获取服务节点信息并发送请求

    公司服务治理需通过 ZK 来做服务发现,Java都被集成,有封装好的包,直接注释器调用即可.Node还需自己手搓. 1. node-zookeeper-client 包连接 ZK 官方文档:https ...

  2. 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

    在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...

  3. uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...

    同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...

  4. iphone adb android,通过ADB获取Android手机信息

    1.获取手机体系信息(CPU,厂商名称等) adbshell"cat/system/build.prop|grep"product"" 2.获取手机体系版别 a ...

  5. 获取BT节点信息bittorrent-discovery

    2019独角兽企业重金招聘Python工程师标准>>> 获取BT节点信息bittorrent-discovery BT/磁力都是常见的P2P下载方式.用户作为一个节点node从其他用 ...

  6. python 客户端 如何获取手机_Python学习---Django的request扩展[获取用户设备信息]

    关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS ...

  7. 如何在系统崩溃时从C++中获取函数调用栈信息?

    这篇文章主要讲述在 Linux 和 Windows 这 2 个平台上,如何用C++ 来捕获函数调用栈里的信息. 一.前言 程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些 ...

  8. MySQL SHOW TABLE STATUS 获取表的信息

    show table status 获取表的信息 show table status like 'tableName' 1.Name 表名称 2.Engine: 表的存储引擎 3.Version: 版 ...

  9. Java获取异常堆栈信息

    Java获取异常堆栈信息 参考文章: (1)Java获取异常堆栈信息 (2)https://www.cnblogs.com/zhi-leaf/p/6288769.html 备忘一下.

最新文章

  1. Python爬虫项目--爬取某宝男装信息 附带源码
  2. freemarker模板最小案例实现
  3. Angular rxjs operators 笔记
  4. aspx转发php_asp,php,aspx一句话合集
  5. Java ClassLoader getSystemClassLoader()方法与示例
  6. Linux桌面版横评:一、评测背景
  7. VK Cup 2018 Round 2: B. Three-level Laser(二分)
  8. java 选取topn_取Oracle中实现TOPN,选取前几条记录
  9. delphi获取本地外网ip_中小企业网络架构:内网安全部署之DHCP,防止恶意DHCP与IP冲突...
  10. 导入数据库sql 文件乱码
  11. 宾馆客房管理系统Mysql数据库课程设计
  12. 触动精灵 获取外网IP
  13. zabbix为啥持续报警
  14. RC电路的充放过程C语言实现,一文讲解RC电路耦合、相移、滤波、微分、积分......
  15. snmp-cmds:最简单的调用 Net-SNMP 二进制文件作为子进程的库可移植python SNMP 库
  16. java如何设置成中文字体,Java程序中文字体配置
  17. 批量提取 srt 字幕文件中的文字
  18. 使用 Minio Client 访问滴滴云 S3 对象存储
  19. JavaScript:对于成绩大于60分的,输出‘合格‘。低于60分的,输出‘不合格‘(使用switch语句)
  20. oracle中 包,Oracle 中包的应用

热门文章

  1. 使用特网云云主机的最显着原因之一
  2. 景安服务器密码修改,[景安网络]提示页
  3. 射频微电子学自存笔记
  4. buildroot ERROR: No hash found for xxx
  5. 网线制作ppt_网线制作PPT课件.ppt-资源下载在线文库www.lddoc.cn
  6. 关于POS接口配置的几个注意事项
  7. 百度地图API写的标记点点击跳动,当点击下一个标记点时停下上一个标记点的跳动
  8. 币圈人警惕!5大错误足以摧毁你的一切
  9. 动态壁纸安卓_这款安卓手机动态壁纸也太好看了吧
  10. 怎么弄计算机题的空缺排名,2015年计算机一级msoffice考前选择题练习40道