我们目前正在评估 Elasticsearch 作为我们的分析解决方案。主要驱动因素是,一旦数据填充到 Elasticsearch 中,Kibana 就可以免费提供报告。
在采用它之前,我的任务是对该工具进行性能分析。
主要要求是支持 500 evt/秒的 PUT 速率。
我目前正在从如下的小设置开始,只是为了在将其上传到更严肃的实验室之前了解 API。
我的策略基本上是,检查与我需要的格式相对应的分析 CSV,并将它们放入 Elasticsearch 中。我没有使用批量 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 目前不是一个选项。
提前致谢。
P.S:我在客户端和服务器上使用的 Elasticsearch 版本是 1.0.0。
最佳答案
关于java - Elasticsearch 性能分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068192/