著者|ティナ
インタビューゲスト|羅鎮暁
ビッグデータシステムのパフォーマンス、展開規模、情報セキュリティを向上させるために、Twitterビッグデータチームは、Presto Druid Connector、Aggregation and Predicate Pushdown、LDAPベースのデータなど、PrestoとDruidに多くの改善と最適化を行いました。承認とセキュリティ保護、Druidネイティブインデックス、およびDruidのパフォーマンスを向上させるためのキャッシュの使用。では、ドルイドは実際の生産でどのように機能しますか?最近、InfoQの記者がTwitterのシニアスタッフエンジニアであるLuo Zhenxiaoにインタビューし、Twitterがドルイドを選んだ理由と将来の計画についての質問に答えました。
Druidは、ビッグデータのリアルタイムクエリと分析のための高フォールトトレラントで高性能なオープンソース分散システムであり、大規模データを迅速に処理し、迅速なクエリと分析を可能にするように設計されています。特に、コードの展開、マシンの障害、およびその他の製品システムでダウンタイムが発生した場合でも、Druidは100%通常の動作を維持できます。
Apache Druidコミュニティは、今年の初めにDruid0.17.0をリリースしました。これは、Apache Incubatorの卒業以来のプロジェクトの最初のバージョンであるため、重要なマイルストーンでもあります。
Twitterは1年以上前にドルイドを採用し始め、それを複数のシナリオに適用しました。Twitterの実際の経験として、Twitterのビッグデータエンジンの責任者であるLuoZhenxiaoにインタビューしました。彼は、QCon Global Software Development Conference(Beijing Station)2020で、「TwitterZBレベルのリアルタイムデータ分析プラクティス」でスピーチを共有します。
InfoQ:こんにちは、オープンソース以来のドルイドの重要な進化は何ですか?
Luo Zhenxiao: Twitterは1年以上ドルイドを使用しています。0.15から0.17まで、これらのバージョンは比較的安定しています。主な変更点は次のとおりです。
- ネイティブ取り込みを設計および実装し、MapReduceへの依存を完全に取り除き、ParquetおよびORCファイルを直接取り込むことができます。
- データ取り込みは、インデクサープロセスを設計しました。
- SQL関数は引き続き強化されています。
- 便利で使いやすいユーザーインターフェイス。
- LDAP認証や承認など、より包括的なセキュリティとプライバシーのサポート。
InfoQ:一般的な企業では、どのシナリオでドルイドを使用する必要がありますか?Twitterがドルイドを選んだのはなぜですか?TwitterのDruidアプリケーションの例をいくつか挙げてください。
Luo Zhenxiao: Druidの主な機能は、高速パフォーマンス、大規模、そして使いやすさです。
- パフォーマンスは1秒未満に達する可能性があり、ビッグデータのリアルタイム計算を真に実現します。
- ドルイドの単一グループは2000を超えるノードに拡張でき、ビッグデータスケールに対する企業の要件を満たします。
- Druidのユーザーインターフェイスは非常に使いやすく、ユーザーはドラッグしてクエリを実行できることがよくあります。これは、技術者以外の人にとって便利です。
Twitterビジネスにはリアルタイムのビッグデータ要件がたくさんあります。当時の市場にある既存のオープンソースソリューションを比較しました。Druidには、安定性、スケーラビリティ、パフォーマンス、使いやすさの点で一定の利点がありました。最後に、Druidを選択しました。現在、同社はドルイドに非常に満足しています。
すべてのTwitterユーザーイベントは、内部メッセージキューを介してDruidにインポートされます。ユーザーはDruidにリアルタイムでクエリを実行でき、Druidに基づいてさまざまな監視とリマインダーを設定することもできます。リアルタイム監視は、ドルイドの高速パフォーマンスと便利なクエリ機能をうまく利用しています。
Twitterで内部的に使用されるDruidはたくさんあり、3つのカテゴリがあります。1つはリアルタイムのユーザー行動分析のためにユーザー行動データをDruidにインポートすること、もう1つはDruidを介して広告主にリアルタイムの広告効果分析を提供することです。 3つ目は、ドルイドのリアルタイム機能を使用することです。リアルタイムの監視とレポートを実行します。
InfoQ:たとえば、企業にはすでに成熟したLamdaベースのオフラインリアルタイムシステムがあります。また、ドルイドはラムダに基づいているので、どの部分を互いに共有できますか?
Luo Zhenxiao: Druidには独自のストレージが必要です。メッセージキューをオフラインシステムとリアルタイムシステム(Druid)に同時にインポートできます。
フィルタリング後に一部のデータにリアルタイムのコンピューティング要件がある場合は、Hadoop分散ファイルシステムを介してデータをDruidにインポートすることもできます。
一般的に、企業のメッセージキューは共有でき、Hadoop分散ファイルシステムもDruidのデータソースとして共有できます。
Twitterは現在、Prestoを介してDruidデータをリアルタイムでクエリするPresto Druid Connectorを開発しているため、企業内のクエリ言語とクエリシステムも共有できます。
Twitterのデータ分析のほとんどはSQLを介して実行されるためです。ドルイドのSQLは全社的に高い需要があります。
既存のDruidSQL関数は完全ではなく、SubQueryもJoinもそれをサポートしていません。Druidデータを他のストレージシステムにインポートする場合、時間と労力がかかるだけでなく、データの整合性を確保することも困難です。これらの考慮事項に基づいて、Prestoを使用してPresto Druid Connectorを開発し、Druidデータの完全なSQL分析を提供し、データの重複を回避し、ストレージスペースを節約し、PrestoConnectorを利用してクロスプラットフォームの結合操作を実行することもできます。 、HadoopデータをDruidデータと結合します。
Presto Druid Connectorを使用しているユーザーもいますが、誰もが非常に満足しています。次のステップでは、パフォーマンスをさらに向上させ、さまざまなサブオペレーションをDruidにプッシュダウンします。究極のビジョンは、すべてのSQL操作をPrestoに統合するよう努めることです。
InfoQ:如果一个系统每天需要处理 PB 级别的系统,再增加一个 Druid 这样的存储系统,是不是很大程度上增加了存储空间的压力?原系统和 Druid,最好的融合方式是什么样的?
罗震霄: 为了性能的提升,Druid 需要自己的存储。对 Twitter 而言,查询速度,和系统的易用性,较之存储空间,更为重要。
Druid 需要做自己的存储的原因是:
- Druid 一个重要的设计目标是实时查询,也就是查询延迟一定要在 1 秒以下。
- 现有硬件的基本性能决定,从内存中顺序读取 4GB 数据的延时在 1 秒左右,实际应用场景中,我们处理的数据远远大于 4GB,所以,没有索引,仅仅靠扫描文件,是不可能达到实时查询要求的。
基于这些考虑,Druid 设计并实现了自己的存储格式,主要是列式存储,并应用字典、RLE 等方式进行优化。
Druid 还设计了 bitmap 索引。在实际应用中,bitmap 索引会以 mmap 方式放在内存中。绝大多数查询可以通过 bitmap 索引直接找到结果,少数查询会通过列式存储进行有选择性的文件查询。
我们也在开发一些项目,尽量减少不必要的数据重复。比如 Presto Druid Connector,通过 Presto 实时查询 Druid 数据,这样当用户需要对 Druid 数据进行 SQL 分析时,用 Presto 就可以了,不必要拷贝数据。
InfoQ:Druid 和 Kylin 这样的开源软件主要差别在哪里?
罗震霄: 对 Kylin 实在不太熟悉,不好妄加评论。
我们当时主要考虑的是 Druid 和 Pinot,这两个现在应用比较广泛。相对而言,Druid 更稳定一些,社区也更大一些。
InfoQ:目前还有哪些 OLAP 平台可供选择?Druid 相对有何优势?
罗震霄: 现有的 OLAP 平台比较多,开源方面,有 Hive、 Impala、Spark、Presto、Drill、Druid、Pinot 等等。Twitter 现在的技术布局:对实时计算,统一于 Druid,对秒级到几十分钟级的数据分析,统一于 Presto,对小时级别的 ETL,统一于 Spark。Druid 主要的优势在性能,稳定性,扩展性,和易用性。能够达到 1 秒以下的实时引擎,只有 Druid 和 Pinot,如果考虑到扩展性和稳定性,Druid 的优势比较明显。
InfoQ:在 Twitter 里,您们定制了关于 Druid 的哪些开发功能?(与开源版本不同的功能)
罗震霄: 主要是四个方面:
- 对 Thrift 文件格式的支持,Twitter 内部有大量的 Thrift 文件。
- Presto Druid Connector,通过 Presto 对 Druid 数据进行 SQL 分析。
- Multi-tenancy Druid,Druid 支持不同的用户类型,包括数据安全,隐私保护,和数据隔离。
- Native Ingestion,摆脱对 MapReduce 的依赖,直接导入 Parquet 文件。
InfoQ:未来,Twitter 还计划对 Druid 开发或加强哪些功能?
罗震霄: 主要有以下计划:
- Unified Indexing Service,为用户提供方便的一键式导入。
- Secure Druid,完整的 Druid 信息安全,包括 LDAP Authentication and Authorization。
- PrestoのプッシュダウンDruidConnectorは、Prestoを使用してDruidの完全なSQL分析を提供し、述語プッシュダウン、集約プッシュダウン、制限プッシュダウンなど、Druidのパフォーマンス上の利点を十分に活用します。
ゲストへのインタビュー
TwitterのシニアスタッフエンジニアであるLuoZhenxiaoは、Twitterのビッグデータエンジンの開発と運用を担当し、主にDruid、Presto、Spark、Hiveのプロジェクトを担当しています。Twitterに参加する前は、Uber、Netflix、Facebookでビッグデータ関連の研究開発と管理に従事していました。PrestoFoundationコミッターおよび技術委員会のメンバー。彼は復旦大学で学士号を、ウィスコンシン大学マディソン校で修士号を取得しています。