Tranquility
- 与Kafka集群交互
- Druid使用Tranquility Kafka
本文以Kafka为例,介绍在E-MapReduce中如何使用Tranquility从Kafka集群采集数据,并实时推送至Druid集群。
Tranquility是一个以push方式向Druid实时发送数据的应用。它替用户解决了分区、多副本、服务发现、防止数据丢失等多个问题,简化了用户使用Druid的难度。它支持多种数据来源,包括Samza、Spark、Storm、Kafka、Flink等等。
与Kafka集群交互
- 确保集群间能够通信(两个集群在一个安全组下,或两个集群在不同安全组,但两个安全组之间配置了访问规则)。
- 将 Kafka 集群的 hosts 写入到 Druid 集群每一个节点的 hosts 列表中,注意 Kafka 集群的 hostname 应采用长名形式,如 emr-header-1.cluster-xxxxxxxx。
- 确保集群间能够通信(两个集群在一个安全组下,或两个集群在不同安全组,但两个安全组之间配置了访问规则)。
- 将 Kafka 集群的 hosts 写入到 Druid 集群每一个节点的 hosts 列表中,注意 Kafka 集群的 hostname 应采用长名形式,如 emr-header-1.cluster-xxxxxxxx。
- 设置两个集群间的 Kerberos 跨域互信(详情参考跨域互信),且最好做双向互信。
- 准备一个客户端安全配置文件:
KafkaClient {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truestoreKey=truekeyTab="/etc/ecm/druid-conf/druid.keytab"principal="druid@EMR.1234.COM";};
之后将该配置文件同步到 Druid 集群的所有节点上,放置于某一个目录下面(例如/tmp/kafka/kafka_client_jaas.conf)。
5、在 Druid 配置页面的 overlord.jvm 里新增如下选项:
Djava.security.auth.login.config=/tmp/kafka/kafka_client_jaas.conf
6、在 Druid 配置页面的 middleManager.runtime 里配置druid.indexer.runner.javaOpts=-Djava.security.auth.login.confi=/tmp/kafka/kafka_client_jaas.conf
和其他JVM启动参数。
Druid使用Tranquility Kafka
由于Tranquility是一个服务,它对于Kafka来说是消费者,对于Druid来说是客户端。您可以使用中立的机器来运行Tranquility,只要这台机器能够同时连通 Kafka 集群和 Druid 集群即可。
1、Kafka端创建一个名为 pageViews 的 topic。
-- 如果开启了kafka 高安全:export KAFKA_OPTS="-Djava.security.auth.login.config=/etc/ecm/kafka-conf/kafka_client_jaas.conf"--./bin/kafka-topics.sh --create --zookeeper emr-header-1:2181,emr-header-2:2181,emr-header-3:2181/kafka-1.0.1 --partitions 1 --replication-factor 1 --topic pageViews
2、下载 Tranquility 安装包,并解压至某一路径下。
3、配置 datasource。
这里假设您的 topic name 为 pageViews,并且每条 topic 都是如下形式的 json 文件:
{"time": "2018-05-23T11:59:43Z", "url": "/foo/bar", "user": "alice", "latencyMs": 32}{"time": "2018-05-23T11:59:44Z", "url": "/", "user": "bob", "latencyMs": 11}{"time": "2018-05-23T11:59:45Z", "url": "/foo/bar", "user": "bob", "latencyMs": 45}
对应的 dataSrouce 的配置如下:
{"dataSources" : {"pageViews-kafka" : {"spec" : {"dataSchema" : {"dataSource" : "pageViews-kafka","parser" : {"type" : "string","parseSpec" : {"timestampSpec" : {"column" : "time","format" : "auto"},"dimensionsSpec" : {"dimensions" : ["url", "user"],"dimensionExclusions" : ["timestamp","value"]},"format" : "json"}},"granularitySpec" : {"type" : "uniform","segmentGranularity" : "hour","queryGranularity" : "none"},"metricsSpec" : [{"name": "views", "type": "count"},{"name": "latencyMs", "type": "doubleSum", "fieldName": "latencyMs"}]},"ioConfig" : {"type" : "realtime"},"tuningConfig" : {"type" : "realtime","maxRowsInMemory" : "100000","intermediatePersistPeriod" : "PT10M","windowPeriod" : "PT10M"}},"properties" : {"task.partitions" : "1","task.replicants" : "1","topicPattern" : "pageViews"}}},"properties" : {"zookeeper.connect" : "localhost","druid.discovery.curator.path" : "/druid/discovery","druid.selectors.indexing.serviceName" : "druid/overlord","commit.periodMillis" : "15000","consumer.numThreads" : "2","kafka.zookeeper.connect" : "emr-header-1.cluster-500148518:2181,emr-header-2.cluster-500148518:2181, emr-header-3.cluster-500148518:2181/kafka-1.0.1","kafka.group.id" : "tranquility-kafka",}}
4、运行如下命令启动 Tranquility。
./bin/tranquility kafka -configFile
5、在 Kafka 端启动 producer 并发送一些数据。
./bin/kafka-console-producer.sh --broker-list emr-worker-1:9092,emr-worker-2:9092,emr-worker-3:9092 --topic pageViews
输入:
{"time": "2018-05-24T09:26:12Z", "url": "/foo/bar", "user": "alice", "latencyMs": 32}{"time": "2018-05-24T09:26:13Z", "url": "/", "user": "bob", "latencyMs": 11}{"time": "2018-05-24T09:26:14Z", "url": "/foo/bar", "user": "bob", "latencyMs": 45}
在Tranquility日志中查看相应的消息,在Druid端则可以看到启动了相应的实时索引 task。
转载于:https://www.cnblogs.com/wynjauu/articles/10369007.html
Tranquility相关推荐
- druid.io集群与tranquility对zookeeper的使用(2)
目录 前言 middleManager启动 : znode创建,workers维护 overlord接收任务并分配一个worker middleManager监听新增任务去启动peon进程 peon进 ...
- 爱奇艺的架构到底有多牛?
导语 生活在信息爆炸时代的我们越来越清晰的认识到海量信息与数据分析的重要性,如提高数据挖掘能力.为运营决策提供关键数据.通过数据分析助力业务创新.在商业决策中的提供较有价值的信息等成为关键,于是大数据 ...
- 【 English 】社会类高频词汇、固定搭配
1.urbanization 城市化 2.urban construction 城市建设 3.centralization 集中化 4.in the long run 从长远角度而言 5.infras ...
- python 英语分词_Python英文文本分词(无空格)模块wordninja的使用实例
在NLP中,数据清洗与分词往往是很多工作开始的第一步,大多数工作中只有中文语料数据需要进行分词,现有的分词工具也已经有了很多了,这里就不再多介绍了.英文语料由于其本身存在空格符所以无需跟中文语料同样处 ...
- 拥有一亿会员的爱奇艺如何搭建大数据实时分析平台
生活在信息爆炸时代的我们越来越清晰的认识到海量信息与数据分析的重要性,如提高数据挖掘能力.为运营决策提供关键数据.通过数据分析助力业务创新.在商业决策中的提供较有价值的信息等成为关键,于是大数据分析平 ...
- 用 Flink 取代 Spark Streaming,知乎实时数仓架构演进【推荐】
"数据智能" (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务.从智能商业的角 ...
- ux的重要性_颜色在UX中的重要性
ux的重要性 When coming up with a new digital solution (desktop, mobile, app, whatever it may be) or any ...
- asp.net ViewState详解
ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用 ...
- storm mysql druid_Druid 集成
title: Storm Druid 集成 layout: documentation documentation: true Storm Druid Bolt 和 TridentState 该模块提 ...
最新文章
- python diango 并发_利用gunicorn提高django的并发能力
- sql 2008服务器响应慢,SQL Server 2008停止响应后,Web服务器不活动
- Eclipse扩展点评估变得容易
- 05.序列模型 W3.序列模型和注意力机制
- android四周阴影效果_帮助独立开发者轻松创建令人惊叹的产品视觉效果
- Java虚拟机专题之内存分配(读书笔记)
- dns设置邮箱服务器,专业版DNS设置-更多-Coremail论客邮件系统-企业邮箱,8亿用户信赖的邮件服务器系统...
- 回调函数例子_Linux C - C基础篇八(函数)
- UVA455 Periodic Strings
- 【Computer Organization笔记16】大实验任务详细说明:支持指令流水的计算机系统设计与实现
- 非参贝叶斯(Bayesian Non-parameter)初步
- Python实现对nginx日志access.log统计
- listview分页加载的实现
- 时域信号处理——时域采样(抽样)
- SVM支持向量机原理详解
- Android 视频直播的流程总览
- 从菜鸟到老鸟--Mac篇 [一]
- pandas用法小结
- 运维监控都监控些什么
- 使用低通滤波器去除基线漂移(MATLAB代码)
热门文章
- 【Python CheckiO 题解】Median
- 【LeetCode - 556】下一个更大元素 III(贪心,思维)
- 【蓝桥杯 - 试题】立方尾不变(tricks,快速取出一个数字的后n位)
- 【牛客 - 289 I】这是一个沙雕题I (字符串问题,水题)
- 【POJ - 2349】【UVA - 10369】 Arctic Network(最小生成树求权值第k大的边)(内附两种算法)
- 从零开始学视觉Transformer(2):图像与Transformer基础
- html超链接点不了_HTML、CSS、JS都有哪些区别?不看必悔
- IDEA启动Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的解决办法
- javascript特效_如何在网页添加鼠标点击特效
- 项目积压需求项目计划_需求变更频繁,项目经理如何做好需求管理?