实时消息Kafka
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展
流式计算Spark Streaming
Apache Flink框架的实时计算模型是基于Dataflow Model实现的,支持定义DAG图;支持定义各类窗口(固定窗口、滑动窗口和Session窗口);支持灵活定义计算触发时间;支持丰富的Function定义数据更新模式。和Spark Streaming一样,Flink支持分层API,支持DataStream API,Process Function,SQL。Flink最大特点在于其实时计算的正确性保证:Exactly once,原生支持事件时间,支持延时数据处理。
Spark Streaming的实现非常简单,通过微批次将实时数据拆成一个个批处理任务,通过批处理的方式完成各个子Batch。Spark Streaming的API也非常简单灵活,既可以用DStream的java/scala API,也可以使用SQL定义处理逻辑。但Spark Streaming受限于微批次处理模型,业务方需要完成一个真正意义上的实时计算会非常困难,比如基于数据事件时间、数据晚到后的处理,都得用户进行大量编程实现。Spark Streaming的优势体现在高性能的对海量实时数据的采集落盘。
Hadoop分布式文件系统(hadoopdistributed filesystem,HDFS)
HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS可以实现流的形式访问(streaming access)文件系统中的数据。
它是基于流数据模式的访问和处理超大文件。
特点:
错误检测和快速、自动的恢复是 HDFS的核心架构目标
HDFS 以支持大数据集合为目标,一个存储在上面的典型文件大小一般都在千兆至 T字节,一个单一 HDFS实例应该能支撑数以千万计的文件。
主从架构。
文件采用write-one-read-many访问模型(一次写,多次读,不可更新已有内容)
跑在 HDFS上的应用与一般的应用不同,它们主要是以流式读为主,做批量处理;比之关注数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。
批处理计算引擎OushuDB
Oushu Database(简称OushuDB)是由Apache HAWQ创始团队打造的新一代云原生数据仓库,该产品采用了存储与计算分离技术架构,具有MPP的所有优点,还具有弹性,支持混合工作负载和高扩展性等优点。 高可扩展,遵循ANSI-SQL标准,具有极速执行器,提供PB级数据交互式查询能力。并且提供对主要BI工具的描述性分析支持。兼容Oracle,GPDB和PostgreSQL,可以轻松取代传统数据仓库包括Teradata,Oracle,DB2,Greenplum和SQL-on-Hadoop引擎。
Oushu Database和Apache HAWQ的不同
全新执行引擎,充分利用硬件的所有特性,比Apache HAWQ性能高出5-10倍
支持Update和Delete,以及索引
C++可插拔外部存储
替换JAVA PXF,性能高数倍,无需安装部署PXF额外组件,极大简化了用户安装部署和运维
原生支持CSV/TEXT外部存储
可以用于不同集群之间共享数据,比如数据仓库和集市之间共享及传输数据
可以用于高速数据加载和数据导出
可以实现可插拔文件系统:比如S3, Ceph等
可以实现可插拔文件格式:比如ORC,Parquet等
支持ORC/TEXT/CSV作为内部表格式,支持ORC作为外部表格式 (通过C++可插拔外部存储)
csv和text文件格式中对非ASCII字符串或长度大于1的字符串作为分隔符的支持