订阅实时数据

最后更新于:2018-08-14 17:43:00

本文档所描述的内容属于神策分析的高级使用功能,涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询您的数据咨询顾问获取一对一的协助。

神策分析设计为开放的架构,让用户可以订阅实时数据来满足更多使用场景。服务端接到一条 SDK 发来的数据后,会对数据做一些预处理并将数据写入到消息队列 Kafka 供下游各类计算模块使用。本文将介绍订阅 Kafka 数据的方法。

1. 一些要求

订阅数据需要满足以下要求:

  1. 启动订阅的机器需与部署神策分析的机器在同一个内网,且必须可以解析神策分析服务器的 host;
  2. 请选用兼容的 Kafka 客户端版本,高版本服务端兼容低版本客户端,反之则可能存在兼容性问题。神策 Kafka 服务端版本一部分早期用户为 0.8.2.x,后期新用户为 0.10.x,具体情况可在服务器上查看;
  3. 仅私有部署版支持通过 Kafka 订阅数据;

2. 订阅参数

参数名称 参数值
topic event_topic
partition 单机 3 个/集群 10 个
zookeeper hostname1:2181,hostname2:2181,hostname3:2181
broker hostname1:9092,hostname2:9092,hostname3:9092

3. 订阅数据

订阅有多种方式,可以选择一种适合使用场景的方式。

下面给出两种 Shell 方式启动订阅的示例,使用 Shell 方式可以通过重定向标准输出将数据写入文件后处理或直接用管道作为其他进程的输入,可以对接各种编程语言实现的处理程序。当然也可以使用原生 API 实现订阅,参数与 Shell 方式的一样,这里不再介绍。

3.1 使用 Kafka Console Consumer

可以使用 Kafka 自带的 Kafka Console Consumer 通过命令行方式订阅,例如从最新数据开始订阅:

bin/kafka-console-consumer.sh --zookeeper 10.10.12.15:2181 --topic event_topic

可以将 stdout 输出到文件或作为其他数据处理进程的输入数据。

3.1.1 Kafka Console Consumer 测试报告

共测试如下共 20 个版本的 kafka 订阅消费的情况

kafka 版本列表如下:

kafka_2.8.0-0.8.0
kafka_2.10-0.8.1
kafka_2.10-0.8.1.1
kafka_2.11-0.8.2.0
kafka_2.11-0.8.2.1
kafka_2.11-0.8.2.2
kafka_2.11-0.8.2-beta
kafka_2.11-0.9.0.1
kafka_2.11-0.10.0.0
kafka_2.11-0.10.0.1
kafka_2.11-0.10.1.0
kafka_2.11-0.10.1.1
kafka_2.11-0.10.2.0
kafka_2.11-0.10.2.1
kafka_2.11-0.11.0.0
kafka_2.11-0.11.0.1
kafka_2.11-0.11.0.2
kafka_2.11-1.0.0
kafka_2.11-1.0.1
kafka_2.11-1.1.0

单机或集群中 kafka 版本:

kafka_2.11-0.10.2

测试结论:

经过测试, 1 中所列出的 20 个版本的 kafka 使用 3.1 的方式均可成功订阅到单机或集群消息队列 ( kafka 版本 kafka_2.11-0.10.2 ) 中的数据。

3.2 使用 Simple Consumer Shell

使用 Simple Consumer Shell 可以实现更灵活的订阅,可参考 Kafka 相关文档: Simple Consumer Shell,例如:

bin/kafka-run-class.sh kafka.tools.SimpleConsumerShell \
                --broker-list 10.10.12.15:9191         \
                --offset 12345                         \
                --partition 2                          \
                --topic event_topic                    \
                --print-offsets

4. 数据格式

订阅的数据的格式与导入时的数据格式基本一致。