什么是Apache Druid?
Apache Druid是一个实时分析数据库,专门用于对大型数据集进行快速分析。在需要实时接收、高正常运行时间和快速查询性能的情况下,此数据库更常用于为用例供电。德鲁伊不仅可以批量分析数十亿行,还可以实时分析。它提供了许多与不同技术的集成,如Apache Kafka Security、云存储、S3、Hive、HDFS、DataSketches、Redis等。它还遵循不变的过去和只附加的未来。由于过去的事件只发生一次,而且永远不会更改,因此这些事件是不可变的,而新事件只发生附加。apachedruid为用户提供了对大规模事务数据的快速而深入的探索。
Apache Druid的特点
Apache Druid的一些令人兴奋的特点是:
- 原生云,易于水平扩展
- 支持SQL分析数据
- 已启用REST API以查询或上载数据
Apache Druid用例
Apache Druid的一些常见用例是:
- 点击流分析
- 服务器度量存储
- 联机分析处理/商业智能
- 数字营销/广告分析
- 网络遥测分析
- 供应链分析
- 应用程序性能指标
Apache Druid的主要特性
Druid的核心架构是通过结合不同的数据仓库、日志搜索系统和时间序列数据库的思想而形成的。
1. 列存储格式
采用列式存储;因此,只加载特定查询所需的列。它有助于快速扫描和聚合。
2. 并行处理
它可以跨整个集群并行处理查询。它也被称为大规模并行处理。
3. 可扩展的分布式系统
Druid主要部署在数十到数百个集群中,提供每秒数百万条记录的接收速率、亚秒到几秒的查询延迟以及万亿条记录的保留。
4. 实时或批量摄入
Druid可以实时(可以立即查询)或批量地摄取数据。
5. 云原生
它是一种不会丢失数据的容错体系结构。一旦Druid接收到数据,它的拷贝就会安全地存储在深度存储中(云存储、amazons3、Redis、HDFS等等)。即使德鲁伊的所有服务器都出现故障,用户的数据也可以很容易地从这个深度存储中恢复。此复制可确保在系统恢复时仍然可以进行查询。
6. 索引
Druid使用简洁的压缩位图索引来创建索引,帮助更快的过滤。
7. 时间戳划分
Druid中的每个数据都必须有一个timestamp
列,因为数据总是按时间划分的,并且每个查询都有一个时间过滤器。
8. 易于与现有管道集成
用户可以很容易地使用Druid从消息总线(如Kafka、kinesis等)本地流式传输数据。它还可以从HDFS和amazons3等数据湖加载批处理文件。
Apache Druid的通用架构
Apache Druid主要由以下过程组成:
- Coordinator–此过程管理集群上的数据可用性。
- Overlord–此过程控制数据摄取工作负载的分配。
- Broker–这有助于处理来自外部客户机的查询。
- Historical–此过程存储可查询的数据。
- Middle manager—此流程负责接收数据。
- Router–这些进程用于将请求路由到代理、协调员和Overlord。这些过程是可选的。
上述过程被组织成3种类型的服务器:主服务器、查询服务器和数据服务器。
1. Master
它掌管着协调者和Overlord。基本上,它管理大数据摄取和可用性。Master负责接收作业并协调“数据服务器”上的数据可用性。
2. 查询
它运行代理和可选的路由器进程。基本上,它通过提供与用户和客户机交互的应用程序的端点来处理查询和外部客户机,将查询路由到数据服务器或其他查询服务器。
3. 数据
它运行中层管理人员和历史流程。这有助于执行作业和存储可查询的数据。除了这3个服务器和6个进程之外,Druid还需要存储元数据和深度存储。
元数据存储
它基本上用于存储系统的元数据(审计、数据源、模式等)。出于实验目的,环境建议使用apachederby。Derby是Druid的默认元数据存储,但它不适合于生产环境。出于生产目的,MySQL或PostgreSQL是最佳选择。元数据存储存储整个元数据,这对于Druid集群的工作非常有用。Derby不用于生产,因为它不支持具有高可用性的多节点集群。MySQL作为元数据存储数据库,用于获取:
- 长期灵活性
- 按预算扩展
- 适用于大型数据集
- 良好的高读取速度
PostgreSQL作为元数据存储数据库,用于获取:
- 复杂的数据库设计
- 执行定制程序
- 多样化索引技术
- 多种复制方法
- 高读写速度。
Deep Storage
Apache Druid对任何接收到的数据使用单独的存储,这使得它具有容错性。一些深层存储技术包括云存储、amazons3、HDFS、Redis等等。
Apache Druid的数据摄取
Apache Druid中的数据被组织成通常有几百万行的段。在Druid中加载数据称为摄取或索引。德鲁伊完全支持批量摄取和流式摄取。Druid支持的一些技术是Kinesis、云存储、apache kafka和本地存储。德鲁伊需要一些结构来保存它摄取的数据。一般来说,数据应该由操作系统时间戳、度量和维度组成。
Apache Druid Zookeeper
Apache Druid使用apache zookeeper来集成所有服务。用户可以使用Druid附带的Zookeeper进行实验,但必须安装Zookeeper进行生产。Apache Druid的集群只能由一个动物园管理员来稳定。Zookeeper负责大部分通信,以保持Druid集群的功能,因为Druid节点无法相互通信。
Duties of a Zookeeper
Zookeeper负责以下操作:
- 历史数据段的“发布”协议
- 协调员领导人选举
- Overlord与中间人任务管理
- 协调器和历史数据之间的段加载/删除协议
- Overlord选举
如何保持Zookeeper的稳定?
为了获得最大的Zookeeper稳定性,用户必须遵循以下实践:
- 应该有一个专门为Druid服务的Zookeeper;避免与任何其他产品/应用程序共享。
- 保持一个奇数的Zookeeper以提高可靠性。
- 对于高可用的Zookeeper,建议使用3-5个Zookeeper节点。用户可以在自己的系统上安装Zookeeper,也可以运行3或5个主服务器并在其上适当配置Zookeeper。
- 与主服务器共享Zookeeper的位置,而不是与数据或查询服务器共享。这样做是因为查询和数据比主节点(协调器和Overlord节点)的工作密集得多。
- 为了完全实现高可用性,建议永远不要在负载平衡器后面使用Zookeeper。
如果Zookeeper坏了,集群将运行。Zookeeper的失败既不会导致添加新的数据段,也不能有效地对其中一个节点的丢失做出反应。因此,Zookeeper的故障是一种降级状态。
Druid监控
用户可以使用它生成的度量来监视Druid。Druid生成与查询、协调和摄取相关的度量。这些度量作为JSON对象发出。它要么被发送到运行时日志文件,要么通过HTTP(像Kafka一样服务)。默认情况下禁用公制的发射。
发出的度量字段
德鲁伊发出的度量值共享一组公共字段。
- Timestamp–创建度量的时间
- Metric–指定给度量的名称
- 服务–发出度量的服务的名称
- Host–发出度量的主机的名称
- Value–与发出的度量关联的数值
关于可用指标的简报
发出的度量可能有超出列出的维度。要更改默认情况下1分钟的德鲁伊发射周期,可以使用“Druid.monitoring.emissionPeriod
”更改默认值。可用指标包括:
- 查询度量,主要分为代理、历史、实时、Jetty和缓存
- SQL度量(仅在启用SQL时)
- 摄取指标(卡夫卡索引服务)
- 实时度量(实时过程,如果包含实时度量监视器,则可用)
- 索引服务
- 协调
- JVM(如果包含JVM监视器模块,则可用)
- 事件接收器消防软管(如果包括事件接收器消防软管监视器模块,则可用)
- Sys(如果包括Sys监视器模块,则可用)
- 一般健康,主要是历史
结论
Apache Druid是市场上最好的,它能够分析集群中的数据,并提供对所有处理数据的简要了解。再加上有Zookeeper在身边,你就可以轻松地使用Apache Druid并统治DataOps市场。此外,还有许多库可以与Apache Druid交互。为了验证服务的运行,可以使用JPS命令。由于Druid节点是java进程,所以当使用JPS命令'$JPS-m
'时,它们会出现。在监控Druid和使用如此庞大的Druid体系结构方面,这真的是数据操作工程师的最后一口冰激凌。
原文地址:https://www.xenonstack.com/blog/apache-druid
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2141.html
暂无评论