背景说明
线上业务反应使用 Flink 消费上游 kafka topic 里的轨迹数据出现 backpressure,数据积压严重。单次 bulk 的写入量为:3000/50mb/30s,并行度为 48。针对该问题,为了避免影响线上业务申请了一个与线上集群配置相同的 ES 集群。本着复现问题进行优化就能解决的思路进行调优测试。
测试环境
Elasticsearch 2.3.3
Flink 1.6.3
flink-connector-elasticsearch 2_2.11
八台 SSD,56 核 :3 主 5 从
Rally 分布式压测 ES 集群
从压测结果来看,集群层面的平均写入性能大概在每秒 10 w+ 的 doc。
Flink 写入测试
配置文件
1config.put("cluster.name", ConfigUtil.getString(ES_CLUSTER_NAME, "flinktest"));2config.put("bulk.flush.max.actions", ConfigUtil.getString(ES_BULK_FLUSH_MAX_ACTIONS, "3000"));3config.put("bulk.flush.max.size.mb", ConfigUtil.getString(ES_BULK_FLUSH_MAX_SIZE_MB, "50"));4config.put("bulk.flush.interval.ms", ConfigUtil.getString(ES_BULK_FLUSH_INTERVAL, "3000"));
执行代码片段
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();initEnv(env);Properties properties = ConfigUtil.getProperties(CONFIG_FILE_PATH);//从kafka中获取轨迹数据FlinkKafkaConsumer010 flinkKafkaConsumer010 =new FlinkKafkaConsumer010<>(properties.getProperty("topic.name"), new SimpleStringSchema(), properties);//从checkpoint最新处消费flinkKafkaConsumer010.setStartFromLatest();DataStreamSource streamSource &#