SlideShare uma empresa Scribd logo
1 de 31
Elasticsearch
インデクシングの
パフォーマンスを
測ってみた
黒澤亮二
自己紹介
• 黒澤亮二 @rjkuro
• 日本IBM
• Elasticsearch暦 1年
• 最近の興味:
分散データベース
NoSQL
Search/Analysis
並列処理
disclaimer
• パフォーマンスは環境に大きく依存します
• できるだけ一般的な傾向を測定するようにしてい
ますが、あくまで一例としてご理解ください
• 本資料は私自身の見解であり、必ずしも私の所属
する組織の立場、戦略、意見を代表するものでは
ありません。
インデクシングのパフォーマンス
特性を調べてみた
• LogstashやBeatsを使わず自力でJavaで
• ElasticsearchにHTTP RESTで直接データを送信
• Node client/Transport clientは使っていません
• Elasticsearch 1.7.3
• 3 nodes x (32 CPU cores, 10GB memory, local SSD)
• Standard analyzer
• Text data avg. size 6KB
• シナリオごとにconfigurationを多少調整しています
Advent Calender書きました
結論:インデクシングを
早く終わらせるためにすべき事
• 複数セッションからデータを送信するといい
• シャード数/ノード数=1がベスト
レプリカあると重い
• refresh intervalはデフォルトよりちょっと長めに
• bulk size小さすぎないように注意
• 不要なら_allや_sourceを削減
ただし注意事項
• キューがあふれるとデータが捨てられる
• 1.x系はデフォルトでthrottlingが有効なので注意
• REST apiで一回に送れる
最大サイズ100MB (デフォルト)
• クラウド環境ではネットワークレイテンシに注意
かいつまんで計測結果を紹介
複数セッションでデータを送信して
スループット向上
ただし送りすぎ注意
32セッション以上ではデータ欠損
データ欠損時
何が起きているか?
各ノードにbulk処理用の
thread poolとqueueがある
queueのデフォルトサイズは50
あふれるとエラーコード429
(Too Many Requests)
{
"index": {
"_index": "test",
"_type": "document",
"_id": "1",
"status": 429,
"error": "EsRejectedExecutionException[rejected execution
(queue capacity 50) on
org.elasticsearch.action.support.replication.TransportShardRe
plicationOperationAction$PrimaryPhase$1@73f30700]"
}
}
queue capacity変更可だがThread Poolのパラメータ変更は非推奨
ちなみに
ここでいう「リクエスト数」 =
bulk requestをshardごとに分解したもの
をカウント
1 nodeに50 shardあったら、
あっという間にqueueがあふれる!
シャードの個数については
ノード内のシャード数が多いと
オーバーヘッド増加
overallocation推奨されることが多いがindexパフォーマンス的にはマイナス
遅くなってしまう
もちろんレプリカ少ない方がいい
primary shardに書き込んだ後に、各replica shardでも書き込みを実行 → 待たされる
refresh intervalとsegment merge
refresh interval
デフォルトより少し長めがいい
なぜかというと
refresh intervalが長いと
background mergeが少ない
bulk処理完了
マージはバック
グラウンドで続く
ちなみにこのグラフ、
interval = 1sのとき
Merge Throttling(速度制限)も
起こっている
Throttlingがあると
徐々にスループットが悪化
1.7.3で測定
Throttlingは2.0から自動化されてユーザーがon/off切り替えできなくなっています
バルクのサイズは?
Max未満で小さすぎなければOK
小さすぎ
バルクサイズのmaxは100MB
クライアント側ではエラーの原因
分かりにくいので注意
javax.ws.rs.ProcessingException: java.io.IOException: Error writing to server
at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:286)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437)
at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343)
サーバーから一方的に切断され
たようなエラーになる
index設計時に
_allや_source削減で
処理を減らしてスループット向上
まとめ
• インデクシングパフォーマンスの傾向/注意事項を
紹介しました
• その他にもいろいろ測っているので興味があれば
懇親会で!

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
Raft
RaftRaft
Raft
 
CRDT in 15 minutes
CRDT in 15 minutesCRDT in 15 minutes
CRDT in 15 minutes
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 

Semelhante a Elasticsearchインデクシングのパフォーマンスを測ってみた

[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
Insight Technology, Inc.
 

Semelhante a Elasticsearchインデクシングのパフォーマンスを測ってみた (20)

第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
 
全文検索入門
全文検索入門全文検索入門
全文検索入門
 
Glueの開発環境(zeppelin)をrancherで作ってみる
Glueの開発環境(zeppelin)をrancherで作ってみるGlueの開発環境(zeppelin)をrancherで作ってみる
Glueの開発環境(zeppelin)をrancherで作ってみる
 
Searchable Snapshot でコスト削減
Searchable Snapshot でコスト削減Searchable Snapshot でコスト削減
Searchable Snapshot でコスト削減
 
A Tour of PostgreSQL
A Tour of PostgreSQLA Tour of PostgreSQL
A Tour of PostgreSQL
 
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
 
Intro2 Sqlanalyzer
Intro2 SqlanalyzerIntro2 Sqlanalyzer
Intro2 Sqlanalyzer
 
Tree-to-Sequence Attentional Neural Machine Translation (ACL 2016)
Tree-to-Sequence Attentional Neural Machine Translation (ACL 2016)Tree-to-Sequence Attentional Neural Machine Translation (ACL 2016)
Tree-to-Sequence Attentional Neural Machine Translation (ACL 2016)
 
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
 
シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL Poolベストプラクティス
 
RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
 
Analytics Environment
Analytics EnvironmentAnalytics Environment
Analytics Environment
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 
広告ログの解析システム
広告ログの解析システム広告ログの解析システム
広告ログの解析システム
 
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 

Elasticsearchインデクシングのパフォーマンスを測ってみた