Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Apache Flink の耐障害性はどんなもの? ~Exactly once の振る舞い~

こんにちは、阪本です。

IoTやらデータ分析やらに関わる機会が増えて、大量のストリームデータに埋もれる(もとい、処理する^^;)ことが増えてきました。
しかも、関わっている業務的に、大概において、データ欠損は許されないという。。

そんなストリームデータを、高速かつ障害に強いアーキテクチャで処理しれくれるのが、Apache Flinkです。
アーキテクチャはこんな感じになっています↓
Apache Flink 1.2.0 Documentation: Distributed Runtime Environment

Flinkの動きをざっくり書くと、

  • JobManagerはジョブを受け付け、1つ以上のTaskManagerに処理の実行を指示する。
  • JobManagerは処理中、各TaskManagerにチェックポイントトリガーを発行する。
  • TaskManagerはチェックポイントトリガーを受信すると、状態のスナップショットを保存し、JobManagerにAckを返す。
  • 障害が発生すると、チェックポイントに戻り、再度実行を行う。

となっていて、このチェックポイントの仕組みが、耐障害性を高めています。

でも、障害に強いと言っても、実際に障害が発生したらどのような挙動になるの?
Exactly onceと書いてあるけど、本当にそうなの?
そんな疑問を解消すべく、こんな条件で試してみました。

f:id:acro-engineer:20170227171700p:plain

2台のKafka Brokerを立て、2台のFlink TaskManagerがConsumerとして並列処理でデータを取得し、Elasticsearchに書き込みます。
動作中に、TaskManagerのうちの1台を強制停止したらどうなるか?をやってみました。

まずは何も気にせずやってみる

Flinkアプリケーションのコードは次のような感じです。文字列をJSONとして解析し、Mapに変換してElasticsearchに流しています。

public class FlinkExecutor {
    public static void main(String... args) {
        new FlinkExecutor().start();
    }

    public void start() {
        // 5秒おきにCheckPointを発行、並行処理数を2とする
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.enableCheckpointing(5000L);
        env.setParallelism(2);

        // Kafkaから受け取った文字列をJSON解析する
        Properties kafkaProps = new Properties();
        kafkaProps.setProperty("bootstrap.servers", "192.168.0.1");
        kafkaProps.setProperty("group.id", "test");
        DataStream<String> stream = env.addSource(new FlinkKafkaConsumer010<>(
                "topic", new SimpleStringSchema(), kafkaProps));
        SingleOutputStreamOperator<Map<String, Object>> outputStream = stream
                .map(FlinkExecutor::parseJson);

        // Elasticsearchに書き込む
        Map<String, String> elasticsearchConfig = new HashMap<>();
        elasticsearchConfig.put("bulk.flush.max.actions", "1");
        elasticsearchConfig.put("cluster.name", "elasticsearch");
        List<InetSocketAddress> transports = Arrays.asList(new InetSocketAddress("192.168.0.4", 9300));
        outputStream.addSink(new ElasticsearchSink<>(elasticsearchConfig, transports,
                new MyElasticsearchSinkFunction<>()));

        env.execute()
    }

    @SuppressWarnings("unchecked")
    private static Map<String, Object> parseJson(String arg) {
        try {
            return mapper.readValue(arg, Map.class);
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
    }

    static class MyElasticsearchSinkFunction<T extends Map<String, Object>> implements ElasticsearchSinkFunction<T> {
        private static final long serialVersionUID = -3596543908572672509L;

        @Override
        public void process(T element, RuntimeContext ctx, RequestIndexer indexer) {
            IndexRequest request = Requests.indexRequest()
                    .index("flink-sample-index").type("sample-type").source(element);
            indexer.add(request);
        }
    }
}

Kafkaに対して20000件のデータを連続して送信中に、2つあるFlink TaskManagerの1つをkillしたところ、TaskManagerと通信できなくなった旨のメッセージがJobManagerのログに出ていました。

2017-03-15 18:56:50,648 WARN  flink-akka.actor.default-dispatcher-3 akka.remote.ReliableDeliverySupervisor - Association with remote system [akka.tcp://flink@flink-taskmanager1:36911] has failed, address is now gated for [5000] ms. Reason: [Association failed with [akka.tcp://flink@flink-taskmanager1:36911]] Caused by: [ホストへの経路がありません

何回か上記のWARNログが出た後、タスクとジョブの状態が「FAILED」となりました。

2017-03-15 18:57:33,615 WARN  flink-akka.actor.default-dispatcher-15 akka.remote.RemoteWatcher                                     - Detected unreachable: [akka.tcp://flink@flink-taskmanager1:36911]
2017-03-15 18:57:33,620 INFO  flink-akka.actor.default-dispatcher-15 org.apache.flink.runtime.jobmanager.JobManager                - Task manager akka.tcp://flink@flink-taskmanager1:36911/user/taskmanager terminated.
2017-03-15 18:57:33,621 INFO  flink-akka.actor.default-dispatcher-15 org.apache.flink.runtime.executiongraph.ExecutionGraph        - Source: Custom Source -> Map -> Filter -> Sink: Unnamed (2/2) (103335fecb10487207ede8049ef5771c) switched from RUNNING to FAILED.java.lang.Exception: TaskManager was lost/killed: ResourceID{resourceId='953329bfa928e188c95f623efe90bd2f'} @ flink-taskmanager1 (dataPort=43427)
...
2017-03-15 18:57:33,626 INFO  flink-akka.actor.default-dispatcher-15 org.apache.flink.runtime.executiongraph.ExecutionGraph        - Job Flink Streaming Job (888c1c6b9e910fddad08615b82bd0782) switched from state RUNNING to FAILING.

ジョブが失敗しても、生きているTaskManagerが残っていれば、自動的にジョブが再開されました(状態がRUNNINGになっています)。

2017-03-15 18:57:33,692 INFO  flink-akka.actor.default-dispatcher-15 org.apache.flink.runtime.executiongraph.ExecutionGraph        - Job Flink Streaming Job (888c1c6b9e910fddad08615b82bd0782) switched from state FAILING to RESTARTING
...
2017-03-15 18:57:43,694 INFO  jobmanager-future-1-thread-1 org.apache.flink.runtime.executiongraph.ExecutionGraph        - Job Flink Streaming Job (888c1c6b9e910fddad08615b82bd0782) switched from state RESTARTING to CREATED.
...
2017-03-15 18:57:43,700 INFO  jobmanager-future-1-thread-1 org.apache.flink.runtime.executiongraph.ExecutionGraph        - Job Flink Streaming Job (888c1c6b9e910fddad08615b82bd0782) switched from state CREATED to RUNNING

ジョブはめでたく再開されました。が、Elasticsearchには、欠損はなかったものの、一部重複するレコードが格納されてしまいました。。
それはある意味自明で、最後のチェックポイント(次の図のチェックポイント2)以降の状態は失われ、再実行されるからです。
f:id:acro-engineer:20170317003026p:plain

Elasticsearchは、トランザクションやスナップショットの仕組みがないため、重複して実行された部分はレコードも重複してしまうことになります。

重複しないようにする

じゃあ、どうすれば重複せずにレコードをElasticsearchに書き込めるでしょうか?
答えは、冪等性を保つような書き込み方にしてあげればOKです。

MyElasticsearchSinkFunctionクラスでElasticsearchに書き込むデータを作っていましたが、
ここにidを指定して、同じデータは同じ一意のidになるようにすることで、重複した(同じidの)レコードがElasticsearchに格納されなくなります。
(厳密には、こっそり見えないところに保存されているようですが。)

@Override
public void process(T element, RuntimeContext ctx, RequestIndexer indexer) {
    // timestampとcategoryの組み合わせで一意となる場合
    String id = element.get("timestamp") + "_" + element.get("category");
    IndexRequest request = Requests.indexRequest()
            .index("flink-sample-index").type("sample-type").id(id).source(element);
    indexer.add(request);
}

今度こそめでたく、重複せずにElasticsearchに格納することができました。

まとめ

Exactly onceといっても、挙動はSink(実はSourceも)の特性に影響されます。
ほとんどのSinkは冪等性を持たず、ゆえにExactly onceではないので、上記のように自分で工夫することが必要です。

とはいいつつ、障害が発生しても途中から自動で勝手にやり直してくれるのは、便利ですね!

今回は単純に各イベントをElasticsearchに保存する処理について調べてみました。
次回は、複数イベント間の関係を考慮して処理するCEP(Complex Event Processing)について調べてみます。

ではでは。

Acroquest Technologyでは、キャリア採用を行っています。

  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} 2017 3日目 | Closing Keynote:Elasticsearch活用で、よりよい世界を作る #elasticon

Elastic{ON}2017 レポートのまとめはこちら!!

こんにちは、nakaです!

Opening Keynoteでの興奮から始まったElastic{ON}も
最終日となってしまいました。
楽しい時間はあっという間に過ぎてしまいますね!

私からは、最後のセッション
「Closing Keynote」セッションについて
フィードバックします。
f:id:acro-engineer:20170310154311j:plain:w800

Closing Keynoteセッションは他のセッション以上に、
メッセージ性の強いセッションでした。

言葉で伝えるのが難しいのですが、私が受け取ったメッセージは、
「世界で起きている社会問題に対し、
Elasticsearchを適用することで、今までと違う方法で改善アプローチができ、
世界をよりよくできる大きな可能性がある」
というものです。


なかなかこれだけでは伝わらないですよね。。
以下詳細をレポートします。

「Cause Award」受賞3社より、プレゼン

このセッションでは、「Cause Award」を受賞した3社それぞれが
自社の取り組みついてと、Elasticsearchを
どう活用しているのかのプレゼンをしてもらいました。

安全保障の課題をElasticsearchで改善する:IST Research

IST Researchはアフガンなどの危険地域の安全保障の課題に取り組む会社です。

f:id:acro-engineer:20170310075026j:plain:w500

特にPULSEというプラットフォームを提供しており、
これは、世界でまだ日の目が当たっていない情報に対し、
収集、分析、可視化するシステムです。
その情報プラットフォームの基盤にElasticsearchを用いています。
f:id:acro-engineer:20170310155510j:plain:w500

現地の人への取材などから、TwitterなどのSNSまで
様々な情報を一か所のElasticsearchデータセンタに集約し、
分析可能にしているとのことでした。

校内暴力やいじめをElasticsearchを用いて減らす:NoSchoolViolence.com

2社目は、NoSchoolViolence.com社からのプレゼン。

校内暴力やいじめに対し、実際に起きる前に防ぐこと、
また現状起きてしまっている暴力やいじめの数を
減らすための活動を行っている会社です。
f:id:acro-engineer:20170310155846j:plain:w500

Lanternというソフトウェアを開発し、課題に取り組んでいます。
f:id:acro-engineer:20170310160348j:plain:w500

Lanternはどのような行動をする人が、
犯罪となる行動をしやすいのかを明らかにする
検索プラットフォームです。

デモでは、以下左の写真にある検索窓に、
「レザージャケットを着ている」
「銃を持っている」
「彼女に振られた」
「家族が借金をしている」
という内容を以下の検索窓に入れて検索すると、
左の写真のように、「weapons use」のRisk scoreがhighであると出てきます。

f:id:acro-engineer:20170310173310p:plain:w300f:id:acro-engineer:20170310160633j:plain:w300


これを使うことで、
あらかじめ犯罪につながる行動を減らすよう教育し、
事前に犯罪を減らすことに取り組んでいます。

Elasticsearch活用で、エボラ出血熱撲滅:eHealth Africa

3社目はeHealth Africa社から、
エボラ出血熱の用の緊急時コールセンタを、
Elasticsearchを用いて実現したというプレゼンです。
f:id:acro-engineer:20170310082938j:plain:w500

以下がKibanaプラグインとして開発されている、
コールセンタの画面です。
f:id:acro-engineer:20170310161804p:plain:w500

この仕組みを用いることで、
500万件以上の電話に対し、対処することができています。


どれも、世界が抱える社会的問題に対し、
Elasticsearchという先端技術を用いて、
今まで解決できなかった問題を解決に導く取り組みでした。

この3社のプレゼンがあったので、
「世界で起きている社会問題に対し、
Elasticsearchを適用することで、今までと違う方法で改善アプローチができ、
世界をよりよくできる大きな可能性がある」
と感じたのですよね。

Elasticsearchの世界を変える力はすごいなと素直に思いました。

最後に

Closing Keynoteの最後には、
Steven氏、Uri氏、Simon氏へのフリー質問タイム。
※実はCTOのShay Banon氏は事情があり参加できませんでした。

f:id:acro-engineer:20170310164803j:plain:w500

質問は、各自が好きな機能や、質問が飛び交いました。

ただこれを見て感じたのは、
ShayBanon氏がカンファレンスにいられなくなった時に、
当然のように、周りがサポートし、
Elstic{ON}を成功に導いていたことです。

Elastic{ON}でのセッションの一つで、
リモート開発をしているのではない、
分散開発をしているんだというメッセージを
発していたセッションがありました。

その通りで、それぞれが考え、行動し、
お互いをサポートして分散して開発する文化があるからこそ、
成し遂げられたのではないかと思いました。

f:id:acro-engineer:20170310165803j:plain:w500


この3日間、生でElastic{ON}に触れられたことで、
新しい技術や機能はもちろん、
Elastic社の文化や、Elasticsearchの熱量を感じることができました。

ENdoSnipeはElasticsearchをベースにしているため、
Elasticsearchが進化する分、ENdoSnipeも進化させていきます。
今回得たヒントで進化するENdoSnipeを見せられるのが楽しみです

ぜひまた来年も来たいですね。
よりElastic{ON}を面白くするために、
日本でElasticsearchを盛り上げねば!頑張ります。
See you again!
f:id:acro-engineer:20170310165159j:plain:w500


Elastic{ON}2017 レポートのまとめはこちら!!

Acroquest Technologyでは、キャリア採用を行っています。

  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} 2017 3日目 | Elastic Cloud活用で運用効率化するために気をつけるべきこと #elasticon

Elastic{ON}2017 レポートのまとめはこちら!!

Good evening, everyone!
営業広報の白井です。

昨晩は、Elastic{ON} Partyが楽しすぎて、ちょっと飲みすぎた感じがあり、
やや二日酔いな感じもしてましたが^^;

セッション参加前には、甘いものを摂取^^
おいしい!
f:id:acro-engineer:20170310015335j:plain:w700

参加セッション

今日は、ユースケース系のセッションを受けまくりました!

私が参加したセッションは以下のとおり。

  1. How Workday Built their Metrics Pipeline with the Elastic Stack
  2. Customer Success @ Elastic: Elastic Stack + Salesforce = <3
  3. Integrating Human Genetic Data to Help Drive Drug Discovery: Elastic @ Merck
  4. Elastic Cloud @ Fandango: How They Shifted Deployment Model to Scale & Meet Their Deadlines
  5. Closing Keynote: Cause Award Honorees and Open Q & A with Elastic Founders

今日は、Elastic Cloudの活用事例をご紹介!

Elastic Cloud @ Fandango: How They Shifted Deployment Model to Scale & Meet Their Deadlines

概要

f:id:acro-engineer:20170310163517j:plain:h500
Fandangoは、アメリカで映画のWebチケット購入、ストリーミング配信、映画レビューサイトの運営と
映画にかかわるすべての事業を行っている会社です。

これまでオンプレミスのElasticと、クラウド上でのElasticを併用しながら、
映画チケットのランキングなどのデータ分析をしていたそうです。

f:id:acro-engineer:20170310163556j:plain:w700

ただ、併用していたところ、そもそも使用していたマシンのスペックもあったようですが、
システムダウンでマーケティング用のデータがふっとんでしまったり、いくつか問題があったようで。。。

f:id:acro-engineer:20170310184501j:plain:w700
f:id:acro-engineer:20170310060803j:plain:w700

しかし、Elastic Cloudを活用することで、比較的移行も簡単に終わり、使用メモリ量や
システムアップデートの時間も減り、問題改善につながったそうです!
さらには、新しいサービスの立ち上げも早くなったとか。

実際に移行してみての移行しやすかったポイントと注意ポイントを語ってくれました。

移行しやすかったポイント

インターフェースが使いやすい!

Elastic Cloudの設定画面が使いやすく、Elastic社のセールスサポートも手厚かったため、
3サービス分の移行がおよそ3日間程度で終わったそうです。
Logstashの設定ファイルの修正も素早く対応できたそう。
f:id:acro-engineer:20170310171717j:plain:w700

注意ポイント

インデックス数を減らすことで、ストレージを節約

移行のタイミングで、インデックス数も減らしていったそうです。
インデックスを減らしたことで、活用するストレージ量も減るので、
トータルでコストが減らせるそうです。
活用効率につながりますね。
f:id:acro-engineer:20170310172657j:plain:w700

本番のログデータは、オンプレとクラウドの両方に移行して、冗長性確保

完全にクラウド化と言えど、一気に本番用のログデータを移行してしまうのではなく、
冗長性を保ったことで、何度か救われたそうです。

最後に

3日間のカンファレンスが終わりました。
ただセッションを聞くだけでなく、ディスカッションがあったり、
パーティーがあったりと、学びあり、盛り上がりあり!の3日間でした。

日本に戻ったら、国内イベントでどんどんフィードバックしていきたい!

Elastic{ON}2017 レポートのまとめはこちら!!

Acroquest Technologyでは、キャリア採用を行っています。

  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} 2017 3日目 | Salesforce+Elastic Stack #elasticon

Elastic{ON}2017 レポートのまとめはこちら!!

こんにちは!
3年目エンジニアのたなけんです。

Elastic{ON}3日目、いよいよ最終日を終えてしまいましたが、
なんといっても、Elasticエンジニアたちの熱を感じた3日間でした。

参加セッション

私が本日参加したセッションはこちら。

  1. Walgreens' Journey To Creating an End-to-End Search Platform
  2. Elastic at Datadog
  3. Customer Success @ Elastic: Elastic Stack + Salesforce = <3
  4. Powering Uber Marketplace’s Real-Time Data Needs with Elasticsearch
  5. What's the Scoop on ES-Hadoop? Spark, Streaming & More
  6. Closing Keynote with Shay Banon: Cause Award Honorees

SalesforceとElasticスタックの活用事例について共有します。

Customer Success @ Elastic: Elastic Stack + Salesforce = <3

Salesforceとは、セールスフォース・ドットコムの提供する製品群のことで、
マーケティングオートメーション、セールスオートメーション、カスタマーサポートサービスなどの
本格的なクラウド型ビジネスアプリケーションとなっています。

Salesforceタワーという新しいオフィスビルを建造中の、
非常に勢いのある会社です。
f:id:acro-engineer:20170310183844j:plain:w700
本社オフィスはElasitc{ON}の会場と同じ、San Franciscoにあります。

導入実績は、
世界で15万社以上と群を抜いています。
そんなSalesforceとElasticスタックの連携について、話を聞いてきました。

こちらのセッションでは、
Elasticスタックをどう顧客の成功に生かせるのか、
実際にElastic社が使用しているSalesforceをより便利にするためにどのようにElasticスタックを活用しているか、
発表されていました。

まず「Customer(顧客)」は、以下のようなレイヤーの情報をもちます。

1番上位の情報が会社名、次に所在情報など。
契約状況、購買状況、そして、プロジェクト情報、プロジェクトで起きている細かいことと続きます。

Elastic社ではライセンスポータルを持っているのですが、
それらライセンスポータルのデータの管理をSalesforceに統合してから、
なんと生産性が下がってしまったそうです。

Salesforce searchを使用していたのですが、探しているトピックやエラーを見つける際に問題があったとのことでした。

そこでSalesforceに貯めて整理したデータを更にElasticsearchに投入して、
Kibanaで可視化することで、検索の問題を解決しました。
f:id:acro-engineer:20170309111028j:plain:w700
このようなデータの流れになっています。

可視化のゴールと使っている技術の概要はこちら。
f:id:acro-engineer:20170309111157j:plain:w700

実際に可視化したダッシュボードのキャプチャが以下です。
f:id:acro-engineer:20170309111348j:plain:w700
顧客情報が可視化されています。

このセッションではキャプチャだけではなく、実際の画面を使ったデモも見せてくれました。
f:id:acro-engineer:20170309111559j:plain:w700
このダッシュボードでは、Elasticスタックを利用している顧客が
Logstashのどのバージョンを使っているのかなど、可視化されています。
今回のデモでは、多くの顧客がqueue systemを使用していることが分かりました。
これらの情報がプロダクトマネージャーによって活用されています。

このように、Kibanaを使って可視化することで、
自分たちのやりたい可視化、分析が出てきたらすぐにVisualizeを追加して実現させていました。

最後に、今後向かう方向を示したスライドがこちら。
f:id:acro-engineer:20170309112116j:plain:w700
やっぱり、ここにもMachine learningが書かれていますね。
まだ、具体的な話はありませんでしたが、
Machine learningが盛り込まれることによってCRMの分析にどのような革新が起こせるか、
非常に楽しみですね!

これからますます勢いを増していくであろうElasticスタック。

Elastic{ON}はあっという間の3日間でしたが、最も印象的だったのは、
Elasticスタックのユーザビリティが非常に高くなったことです。

今までも、簡単に可視化ができることで驚かれるツールではあったのですが、
近い将来には、データを投入してMachine learningによる高度な分析を行うところまでを、
誰でもすぐに実現できるElasticスタックが使えるようになりそうです!

それでは!

Elastic{ON}2017 レポートのまとめはこちら!!

Acroquest Technologyでは、キャリア採用を行っています。

  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} 2017 3日目 | UberがElasticsearchを使って、苦労した話 #elasticon

Elastic{ON}2017 レポートのまとめはこちら!!

こんにちは!@です。
遂に終わってしまいました、Elastic{ON}。
これから日本に帰ります。1日目から3日目まで楽しいセッションが続いていました。

さて、Elastic{ON} 最終日のレポートです。
本日は3つのセッションを聞きました。

  1. Powering Uber Marketplace’s Real-Time Data Needs with Elasticsearch
  2. 'What's the Scoop on ES-Hadoop? Spark, Streaming & More
  3. Closing Keynote

セッションが少ない理由はAsk Me Anything(AMA)で主に質問をしていたからです。
Elastic社の人に質問し、丁寧に回答をいただき、自分の理解も深まりました!

ようやく本題です。「Powering Uber Marketplace’s Real-Time Data Needs with Elasticsearch」を紹介します。

Powering Uber Marketplace’s Real-Time Data Needs with Elasticsearch

f:id:acro-engineer:20170310141453j:plain:w500

Uberは自動車配車アプリのサービスです。
海外に行った時にUberを使用して、
車に乗せてもらうこともあるのではないでしょうか。

そのようなUberのMarket Placeでは、
動的な料金設定やルートの解析を行っています。
これらをリアルタイムに実現するために、Elasticsearchを導入しました。
しかし、大規模なAggregationを行った場合には性能問題が発生していたそうです。

f:id:acro-engineer:20170310155610p:plain:w500

リアルタイム処理を実現するアーキテクチャは次の図です。
SparkやElasticsearchを組み合わせています。

f:id:acro-engineer:20170310134948p:plain:w500

このアーキテクチャに対して、複数のAggregation(Terms Aggregation)をしていたそうです。
ただ、検索結果のデータが膨大になり、OutOfMemoryErrorが発生するようになりました。
これに対しての解決策として、Elasticsearchのクエリ実行前に実行時の候補を見積もり、
適切に検索に制限をかけるようにしています。

f:id:acro-engineer:20170310163808p:plain:w500

Elasticsearchは非常に便利で、簡単にスケールする、
分散するといった面で私も業務の中でかなり使っています。

ただ、ここまで大規模なシステムに対してElasticsearchを使うと
こんな問題にぶちあたるのか・・・と思いました。
日本でもここまで使ってみたいです!

最後に

遂にElastic{ON}が終わってしまいました。
セッションを通して、以前まで知らなかったプロダクト、アーキテクチャを知ることができました。
以前から思っていましたが、想定以上にElastic Stackのプロダクトの進化が早いです!

ただ、初めてのアメリカ、かつ、海外カンファレンスだったので、面白かった!
来年もElastic{ON}に行って情報を仕入れたいと思っています。

フィードバック会も開く予定なので、皆さんぜひ、お越し下さい。

また、どこかでお会いしましょう!See you again!

Elastic{ON}2017 レポートのまとめはこちら!!

Acroquest Technologyでは、キャリア採用を行っています。

  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} 2017 3日目 | 感動必至のKibanaの新機能!!#elasticon

Elastic{ON}2017 レポートのまとめはこちら!!

こんばんは!PlNOKlOです。
本日が最終日!ほんと充実したカンファレンスでした✨

日本の皆さんにこの興奮を
お話しできるのが楽しみです!!

こちらが最終日の私が参加したセッションです。

参加セッション

  1. X-Pack Enablement: Security Workshop
  2. Under the Surface of Optum's Security Big Data Lake
  3. Security @ Slack
  4. Getting Your Data Graph-Ready
  5. Kibana Visualizations Deep Dive
  6. Closing Keynote: Cause Award Honorees


今日はSecurityでのElasticsearch活用例をたくさん聞けました!
全日SIEM関係の発表が多く、
ElasticsearchをSIEM目的で利用している企業が海外では増えてきているのを肌で感じました。

さぁ、日本も続け!!


ただ、こちらでは、私の大好きなKibanaについて紹介された
「Kibana Visualizations Deep Dive」を書きます!

f:id:acro-engineer:20170310065054j:plain:w700

「Kibana Visualizations Deep Dive」ほんと素晴らしかった!!!!
今後追加される予定の機能をDemoをしながら紹介されていました。


新たなVisualization、新たなAggregation、そして新たなMap。。。
過去、私が星野リゾートで可視化していた頃、
「こんな可視化ができたらよいのに!」
とたくさん悩んだ課題が今回の発表ですべて解決されそうです!!


内容のご紹介の前に、みなさん新しいKibanaは試されましたか?
Elastic Stack 5.1ではタグクラウドが増え、
Elastic Stack 5.2ではヒートマップが増えました。
どんどん新しい可視化画面が増えていきますね!!

タグクラウドもヒートマップも知らない方は
以下をぜひ読んでみてください!

タグクラウドについてはこちら

f:id:acro-engineer:20170310065559j:plain:w700

ヒートマップについてはこちら

f:id:acro-engineer:20170310065517j:plain:w700

セッションはこれらのVisualizationのDemoから始まり、
そして怒涛の新機能の紹介がされました。


こちらが紹介された機能です。

  1. Visualization - Vertical bar chart
  2. Aggregation - Top Hit
  3. Visualization - Time Series Visual Builder
  4. Visualization - Vector map
  5. Tile mapの改善 

 

1. Vertical bar chart

 以前、私は線グラフとエリアグラフを同時に表示したかったことがあり、
 Timelionを使って無理やり実現したことがあります。
 (こちらの記事でTimelionでの書き方を紹介しています!)
 
 f:id:acro-engineer:20170310065322j:plain:w700
 
 Verticle bar chartでは、Y-Axis(縦軸)の設定を2つ指定することができるようになり、
 それらは棒グラフ、線グラフなど、種類を選んで表示することができます。
 
 これで簡単に実現できますよ!!
 
 しかもグラフの上下にそれぞれの単位が書かれているので、
 どういう見方をすればよいかも分かりやすいですね😄
 
 

2.Top Hit

 f:id:acro-engineer:20170310065929j:plain:w700

 こちらはAggregationなので、様々なVisualizationにて、
 Y-Axisで設定できるものになります。
 
 Top Hitではフィールドと数字を指定することができ、
 指定のフィールドの、上位何番目までの値を表示する
 といったことが可能になります。
 (もちろん下位何番目というのも表示可能です!)
 
 ランキング表示など前よりずっと、
 やりやすくなりますね😄
 
 

3.Time Series Visual Builder

 f:id:acro-engineer:20170310070303j:plain:w700
 
 こちらはTime Seriesを拡張したもので、
 画面下のDataタブで設定した値を、
 画面上部の5つのタブの中からグラフを選択し、表示することができます!
 
 そして画面下のDataタブでは、
 Timelionで苦労して書いていたクエリを
 ドロップダウンから選択して設定できます!
 
 また、こちらの設定では、
 作成したMetricsを使用して、計算をすることも可能です。
 
 f:id:acro-engineer:20170310070935j:plain:w700
 
 こちらが計算をしているAggregationです。
 Scriptも書くことができるので、
 これで今まで困難だった値の計算が実現できますね😁
 
 
 これらを使いこなすことで以下の画面も作れるようです。
 なんてすごいんだ😳
 
 f:id:acro-engineer:20170310070220j:plain:w700
 
 

4. Vector map

 f:id:acro-engineer:20170310072401j:plain:w700
 
 こちらは、Kibana3のころ実現できていた、
 画面が戻ってきます!
 
 セッションでは、Vector mapのデモも紹介してくれました。
 
 f:id:acro-engineer:20170310072655j:plain:w700
 
 こちらはElastic社が持つHPにアクセスが多い国を
 可視化している画面になります。
 
 アクセスが集中しているところが色が濃くなっており、
 一目で簡単に問題を発見することができますね!!

 

5.Tile mapの改善

 f:id:acro-engineer:20170310072800j:plain:w700
 
 そして細かい修正が多いのですが、
 変わった点としては、
  1)描画されている地域以外の計算がされなくなる
  2)利用されていた地図データが別のものになった
  3)データがあるエリアに色がつくのではなく、値が集中箇所に色がつくようになる
 が変わった箇所です!
 
 上記の変更により、
 描画速度と描画精度が向上します。
 
 また、今後ですが、2つのMetricsを指定することも可能にするそうです。

 それぞれ色を変えて表示すれば、
 相関も分析できるかもしれませんね!!

 
これらが今回Kibana Visualizations Deep Diveの発表になります!

どうでしたか?
私は帰ったらすぐにKibanaを試してみたくなりました😆

こちらのセッションでは、今後のKibanaの方向性についても話がありました。

やはり、過去のKibanaはエンジニア向けのツールでしたが、
徐々にエンジニア以外の人も触れるものにしようと
開発を進めているそうです。

データの表現も、データの計算も自由度が増し、
より親しみやすくなるのではないでしょうか?

ますます今後のElasticの動きから
目が離せなくなりますね😊


読んでいただいている皆様が抱えている課題も、
もしかしたらこちらの新機能で実現できるのではないでしょうか?

ぜひ皆様、新Kibanaをお楽しみにしていてください!



もしElastic{ON}の詳しい情報が知りたい方や、
ビジネスでElasticsearchを活用したいと考えている方は
私が営業としてお話ししますので、
ぜひ一度お尋ねください!!
Elastic{ON}で聞いた最新情報を交えて一緒にお話ししましょう✋️


それではみなさま、日本で会いましょう!

"Please enjoy using Elasticsearch !"

Elastic{ON}2017 レポートのまとめはこちら!!

Acroquest Technologyでは、キャリア採用を行っています。

  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} 2017 3日目 | Beatsの拡張・カスタマイズ #elasticon

Elastic{ON}2017 レポートのまとめはこちら!!

こんにちは。
@です。

いよいよElastic{ON}も最終日、
今日は下記のセッションに参加してきました。

参加セッション

  1. Timelion: Magic, Math, and Everything in the Middle
  2. Ship Your Own Data: Tailoring Beats to Your Use Case
  3. Elasticsearch Search Improvements
  4. Kibana Visualizations Deep Dive
  5. Closing Keynote

今日は、Timelionの使い方や、Beatsの拡張・カスタマイズ方法、
Elasticsearchの検索機能改善に関するセッションなどがありました。
昨日はMachine LearningやKibanaの新機能など、ある意味誰にとってもインパクトのある発表が多かったのに対し、
ある程度使い込んだ人にとって嬉しい情報が盛りだくさんでした!

Timelionのセッションでは、特に目新しい情報はありませんでしたが、使い方を詳細に説明してくれました。
もともと、Timelionは公式のリファレンスにも詳細な使い方が載っておらず、敷居が高いと感じていた方も多いのではないでしょうか?
しかし、複雑な計算処理が可能なので、使いこなすことができれば分析の自由度が大きく広がります。

f:id:acro-engineer:20170309101400j:plain:w700

また、簡単なものであればTimelionでも異常検知を行うことができます。
Machine Learningがリリースされますが、それとの使い分けも今後重要になりそうです。
f:id:acro-engineer:20170309104413j:plain:w700

Ship Your Own Data: Tailoring Beats to Your Use Case

Timelionも印象的でしたが、
今日のセッションの中で特に面白かったのは、Beatsシリーズに関するセッション、「Ship Your Own Data: Tailoring Beats to Your Use Case」です。
こちらのセッションでは、現在提供されている各Beatsの処理フローや仕組みが詳しく説明され、
自分のユースケースに合わせてカスタマイズするにはどうすれば良いのか?というのがメインテーマとなっていました。

f:id:acro-engineer:20170309110132j:plain:w700

Beatsシリーズの基盤となるlibbeatの構成や、
Filebeat・Packetbeat・Metricbeat・Heartbeatなど、各種Beatsの仕組みが説明されています。

libbeat↓
f:id:acro-engineer:20170310154604j:plain:w700

Packetbeat↓
f:id:acro-engineer:20170310160555j:plain:w700

Heartbeat↓
f:id:acro-engineer:20170310160614j:plain:w700

いずれのBeatsもlibbeatを基盤にしていますが、各々違いがありますので
カスタマイズする際にはその違いを理解しておく必要がありそうです。
f:id:acro-engineer:20170310151349p:plain:w700

実際にMetricbeatの機能を拡張して動かすデモも行われました。
短時間で独自のBeatを作成していました。
拡張性を考慮した設計になっているので、非常に便利ですね。

f:id:acro-engineer:20170309114111j:plain:w700

ただ、拡張性があるとは言っても、
他のプロダクトがKibana画面上での一括管理に移行していることを考えると、まだまだ進化の余地があると思います。
Beatsは監視対象となる各サーバに仕込むので、Kibana画面上でBeatsを一括管理できるようになるとさらに使いやすくなりそうですね。
帰ったら早速自分のBeatを構築してみたいと思います。
今後のBeatsの動向に期待しましょう。

おまけ 〜AMA Booth〜

3日間を通じてAMAのブースが常時オープンしていました。
セッションに参加するのとは違い、Elasticのエンジニアと1対1で、しかも自分の話したいことを話せます。
セッションそっちのけで、張り付いても良いくらいの価値が得られると思います。

周辺の様子↓

Post from RICOH THETA. - Spherical Image - RICOH THETA

机はホワイトボードになっていて、図などを描きながら質問することができます。↓
f:id:acro-engineer:20170309122723j:plain:w700

色々な疑問や悩みを話してきました。
日本語を話さないエンジニアがほとんどでしたが、ホワイトボードやElastic Japanの皆さんの助けのおかげで
言語の壁はなんとかなりました笑
Elastic Japanの皆さん、改めてありがとうございました。

さいごに

急速に進化を続けるElastic。
Elastic{ON}全体を通して、そのVisionや思想が伝わってきました。
私は日本で、Elasticsearchテクニカルワークショップの講師を務めています。
日本に帰ったら、この感動を皆さんにできるだけお伝えしたいと思います!

帰国後に、弊社でフィードバックイベントなども企画しておりますので、
ご興味ある方は是非弊社までご連絡ください!

以上、@がお送りしました!

Elastic{ON}2017 レポートのまとめはこちら!!

Acroquest Technologyでは、キャリア採用を行っています。

  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com