我尝试阅读了关于LinkedIn的Kafka论文(1)

0. 关于此投稿

因为我读了一篇关于LinkedIn的Kafka的论文,所以我只记录了摘要。
论文链接
http://sites.computer.org/debull/A12june/pipeline.pdf

1. 简介

    • LinkedInでは、コネクション予測、ジョブのマッチング、表示する広告の最適化をユーザーの行動履歴から機械学習を利用してモデリングしている。

 

    ユーザーのソーシャルネットワークに関連のあるニュースフィードをactivity drivenに投稿している

1.1 以前的系统

    • 行動履歴データをデータウェアハウス(DWH)にInsertするバッチ指向のシステムとサーバのメトリクスとロギングを処理するシステム(監視システムにのみ利用)の2つのシステムを構築していた。

 

    • どちらもpoint to point でデータのやり取りを行い、送信先は1つに決まっていた。

 

    • ユーザの行動履歴はログファイル(xml形式)に収集してETLサーバにバッチで送信する。

 

    • ETLサーバがログファイルのメッセージをパースして、RDBとHadoopにインポートする。

 

    • 問題点

リアルタイム性に欠ける。(ファイルに出力されたものをパースしてインポートするので、ファイルローテーションの時間分ラグが出てしまう。)
送信先は一つしかサポートしない
アプリケーションが直接xmlのメッセージを出力するので、予期しないスキーマの変更があった場合に対応できない

1.2 实时基础设施的困难

为了使系统更加实时化,我们尝试了各种方法。
我们尝试了使用ActiveMQ创建原型并进行测试,可以处理每秒2,3000条消息,同时在LinkedIn和其他服务中也有运行记录。然而,出现了以下问题。

    • メモリにキューとして保持できるデータ量を超えるとその時点で性能が著しく低下する。(ランダムIOが多いため。)

 

    • Consumerプロセス(データを取得するクライアント)自身がバランスをとっているので、与えられたキューにConsumerプロセスがないという事象が発生した。(管理できないので、Consumerからbrokerへの割当をstaticにしたくなかった。)

 

    ActiveMQ自体のバグで(brokerのhung up、コネクションリーク、アウトオブメモリー等)

这些成为了他们不想使用现有产品而自行开发基础设施的动力。

2. 管道基础设施

2.1 Kafka的概念总览

    • 抽象化したバイト配列としてメッセージをモデリングする。

 

    • Producerはあるフィードの全てのメッセージを持つtopicにメッセージを送る。

 

    • それぞれのtopicはKafkaのbrokerのクラスターに分散され、brokerはそれぞれのtopicごとのパーティションを持つ。

 

    • パーティションはメッセージが書かれた順番に並ぶ。

 

    • システムの動作は以下2つ

topicの値に新規メッセージをappend
特定のメッセージidから始まるパーティションからメッセージをfetch

全てのtopicは複数のsubscriberから読み取り可能、かつ、とても小さなoverheadでsubscriberを追加可能
稼働中にグループにノードを追加可能でstaticなconfigurationなしに自動リバランスする。
Zookeeperを利用してグループのハートビートやconsumerへpartitionの割当を行う。  ※この辺りの説明は結構複雑だったので、一旦放置。
多少のデータロスは許容できるものに利用している。高可用性を提供する試みとして、それぞれの機能(producer,broker,consumer)ごとにロスや遅延を発見するためのデータを計測している。

2.2 领英上的卡夫卡使用方式

    • Kafkaは1日あたり100億を超えるメッセージの書き込みを処理する。

 

    • 高トラフィックの時間帯は秒間172,000メッセージを扱う。

 

    • totalで40のconsumerがありtopicをconsumeしている(8個はreplicationやモニタリングツール用で、それ以外はユーザーやその他機能から書き込まれるアプリケーション)

 

    • ユーザー行動履歴データとシステムログをあわせて367topicをサポートしている。

 

    • 最大で一つのtopicが1日92GB追加される。小さなものは数KB

 

    • メッセージデータは7日間保持され、データがconsumeされたかどうかに関わらず経過した時点でgarbageとして収集される。

 

    • Consumerはこのポリシーをtopicごとに変更可能

 

    • 全topic合わせて9.5TB(圧縮済み)を保持している。

 

    • Kafka用のサーバはデータセンターごとに8台で、それぞれのサーバがStorage 6TB(RAID10で普通のSATAディスク)

 

    クラスターにつき、10,000コネクションを捌く

3. 高吞吐量的工程

将设计为将日志文件汇总起来的方式,通过缓冲并采用高效的IO模式进行写入,以提高吞吐量为优势。然而,由于故障,缓冲的消息可能会丢失,并且缺乏实时性。换句话说,在写入文件服务器之前,必须确保写入完成。为了缩短这个时间,可以考虑将文件轮换间隔缩短到每分钟一次或其他短时间间隔,但这样会增加管理大量文件的成本。

作为架构和设计目标,Kafka的目标是通过日志系统管理成本并设计高效的消息系统。

Kafka在技术层面上实现了以下三个效率优化措施(有关详细信息将在以后提供):
– 分区化
– 优化块大小
– 数据压缩

只要在这里,我自己的经验有许多适用之处,并且很值得参考。之后,如果我有兴致的话,我会补充的。

bannerAds