我们目前正在评估 Elasticsearch 作为我们的分析解决方案。主要驱动因素是,一旦将数据填充到 Elasticsearch 中,Kibana 就会免费提供报告。
在采用它之前,我的任务是对该工具进行性能分析。
主要要求是支持 500 evt/sec 的 PUT 速率。
我目前从一个小的设置开始,只是为了在我将它上传到更严肃的实验室之前了解 API。
我的策略基本上是,检查与我需要的格式相对应的分析 CSV,并将它们放入弹性搜索中。我没有使用批量 API,因为实际上事件不会以批量方式到达。
以下是执行此操作的主要代码:
// Created once, used for creating a JSON from a bean
ObjectMapper mapper = new ObjectMapper();
// Creating a measurement for checking the count of sent events vs
// ES stored events
AnalyticsMetrics metrics = new AnalyticsMetrics();
metrics.startRecording();
File dir = new File(mFolder);
for (File file : dir.listFiles()) {
CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()), '|');
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
AnalyticRecord record = new AnalyticRecord();
record.serializeLine(nextLine);
// Generate json
String json = mapper.writeValueAsString(record);
IndexResponse response = mClient.getClient().prepareIndex("sdk_sync_log", "sdk_sync")
.setSource(json)
.execute()
.actionGet();
// Recording Metrics
metrics.sent();
}
}
metrics.stopRecording();
return metrics;
我有以下问题:
- 我如何通过 API 知道所有请求何时完成并将数据保存到 Elasticsearch 中?我可以在 Elasticsearch 中查询我的特定索引中的对象计数,但这样做本身就是一个新的性能因素,因此我取消了这个选项。
- 以上是将对象插入 Elasticsearch 的最快方法还是我可以做的其他优化。请记住,批量 API 目前不是一个选项。
提前谢谢。
PS:我在客户端和服务器上使用的 Elasticsearch 版本是 1.0.0。