Yonatan Most created FLINK-7347: ----------------------------------- Summary: "removeAll" is extremely inefficient in MessageAcknowledgingSourceBase.notifyCheckpointComplete Key: FLINK-7347 URL: https://issues.apache.org/jira/browse/FLINK-7347 Project: Flink Issue Type: Improvement Components: DataStream API Affects Versions: 1.3.1 Reporter: Yonatan Most
Observe this line in {{MessageAcknowledgingSourceBase.notifyCheckpointComplete}}: {code} idsProcessedButNotAcknowledged.removeAll(checkpoint.f1); {code} The implementation of {{removeAll}} is such that if the set is smaller than the collection to remove, then the set is iterated and every item is checked for containment in the collection. The type of {{checkpoint.f1}} here is {{ArrayList}}, so the {{contains}} action is very inefficient, and it is performed for every item in {{idsProcessedButNotAcknowledged}}. In our pipeline we had about 10 million events processed, and the checkpoint was stuck on the {{removeAll}} call for hours. A simple solution is to make {{idsForCurrentCheckpoint}} a {{HashSet}} instead of an {{ArrayList}}. The fact that it's a list is not really used anywhere. -- This message was sent by Atlassian JIRA (v6.4.14#64029)