使用Stream、Connect等功能,大肆炫耀

首先

福禍福禍福禍禍福福〜♪

kafka.jpg

非常抱歉,我只是开了个玩笑。(看起来陌生人会比较多)

无论如何,我们的 Advent Calendar 2017 第三天是由负责管理基础设施、开发以及数据库和分析系统的全能型人才 @imyslx 主持,但我们不会说关于糖果的话题。(太啰嗦了)

这是一个关于卡夫卡的故事。这是我个人最近喜欢的一个应用程序之一。

卡夫卡是什么

这是一个执行开源分布式流媒体处理的平台。(就像维基百科上所写的。)
总之,它是一个用于快速收集/传送日志和事件的系统。

作为存储、消息系统和流媒体处理平台,可以在各种用途中使用。这次我们将着重讨论流媒体方面。

背景 – 背景信息

好的,主题是关于访问日志的流式处理。
为了更充分地利用公司内部的信息!作为企图的一部分,我们开始建立一个新的分析基础设施,与我们原本主要使用的工具分开。

因为所谓的Web服务器规模可能达到数十台,如果还包括后端API层,数量将相当可观。
(我稍微忘记了公开数值)要找到一个可以收集PV数量和后端API访问数量的基础设施,选择是有限的。

技术选择

仅需一个选项,简单地使用td-agent

首先,从td-agent和简单的解析器开始,尝试在将数据流向Elasticsearch的环境中构建。
为了负载均衡,在每台服务器上安装了简单的perl解析器,并将其传递给td-agent,这就是整个机制。

1.png

问题所在

    • アプリケーションから吐かれるログの量>Parserの処理速度

 

    • 各サーバから受信するFluentdのBufferがががg

サーバにBufferが溜まって。。。

②兔子消息队列

RabbitMQ是一個使用AMQP的消息應用程序。它具有稱為HA的功能,如集群和鏡像,由於在內部已經有一定的實踐經驗,所以我們考慮將其納入考慮範圍。我們也盡力進行了PHP消費者的調優,但是RabbitMQ表現不如預期,因此決定不採用。

2.png

問題所在

    • Mirrorとかはしてくれるけど適切にバランシングするためにLB置いたりコンポーネントが増える。

 

    • Consumerが止まるとものすごい勢いでMessageが溜まってメモリとDiskを食いつぶして停止する。

コレについては設定のチューニングが半端だった可能性もあるけど、「High watermark!!」ってなると受信を停止してしまう基本構造。
2台死ぬと残りのホストが割を食って全滅、Producerであるtd-agentが動作停止する自体に。

あんまりいっぱい処理するというよりかは信頼性に重きをおいたアプリケーションなのかなって印象。

卡夫卡

因为使用RabbitMQ需要付出很大的努力,这并不是本质的事情,所以我们打算尝试一下新的解决方案!于是我们选择了Kafka。
嗯,除了简单地使用这种工具外,折磨高负载服务也是我的一种兴趣之一。

选择的原因

    • 基本的に分散プラットフォームであること。

RabbitMQとかは正直そんなに分散考えてなさそう。

複数のConsumerからデータを取得することを前提に考えられていて、固定されない様々な用途でデータを利用出来る。
Cosumerがどこか死んでも色々巻き込んで死なない。

データ量の閾値や指定した時間が経過すると古いデータは自動的に消えていく。
Consumer側も複数用意しておけばデータロストもせずに済む。

因此,我决定尝试使用Kafka。

构成

相对来说比较简单,我们从每个服务器将日志发送到Kafka,然后使用Streams和Connect进行解析和发送处理。

3.png

在中国,只需要一个选项来释义以下内容: “やってること”。

正在做的事情

    • td-agentでLTSV出力したログを拾ってKafkaのTopicに投げる

 

    • kafkastreamsを用いてLTSVをJSONにしつつ、独自Cookieをバラし、不要なデータの破棄する

 

    • kafka-connectでJSONをElasticsearchに投げる

各サーバの応答速度やリクエスト数などを確認出来るなど、エンジニア的な用途で使ったり、データを吸い出して別のプロダクトに持っていったり。

kafkastreamsを用いてJSONをAvro形式に変換しつつ、解析に必要なデータの抽出や不要なデータの破棄

HDFS/Hive上にLoadさせていく。

4.png

由于对KafkaStreams和KafkaConnect了解不多,所以我打算以后单独写一篇文章来介绍它们在做什么。
如果开始讨论Java代码之类的内容,可能会变得很长。。。

每天处理超过1亿条记录,换句话说,考虑到每个主题的输入/输出,我们可以用仅3个最小配置的集群轻松处理数亿条记录。在峰值时可能每秒处理超过5000条记录。

我一开始觉得你真是做得很好。

接下来要做的事情 (Jiē zuò de

暂时做好了盒子,只要对它进行一些变化,就能创造出各种东西来。
我有好几年想要做的事情,想列举一些。

    • Elasticsearchに乗っているデータを纏めてアクセス状況を可視化したい。

社内数値を纏めたポータルみたいなものを作りたいと予予考えている。

社内でそういう情報に手軽に触れてデータで遊べる空気感を醸成したい。
機械学習系にはぜひ手を出したい。

さっさとやって学習しっかりしたほうがいい説もある。

梦想颇多,但能否获得回报则是另一个话题。
嗯,我大概是打算以兴趣为驱动,随意地发布作品。

结束时

希望這種閒聊式的進行方式,如果對某人有所幫助,那就太好了。
由於數據處理仍處於過渡期,如果出現有趣的事情,我們希望能增加更多的文章。

因为 @yutanakano 在第四天说要写诗,所以请期待吧!