Zhandos Bizhigitov (Astana), Mickael Delage (Groupama-FDJ), Jenthe Biermans (Katusha-Alpecin), Matias Le Turnier (Cofidis), Jan Tratnik (CCC Sprandi Polkowice), Alexander Porsev (Gazprom-Rusvelo) and Kamil Zielinski (Poland) formed the early breakaway.
The advantage to the escapees was never large and their gap topped out at just over two minutes, with Team Sky in control of the peloton.
Coming into the finish there were plenty of attacks which were neutralised but led to a messy sprint which saw Kwiatkowski jump early and take the win.
"The best form of defence is attack," said Kwiatkowski. "We stuck to that plan and it was perfect. We didn’t know what the final would be like but when we entered the final circuit I said to the boys on the radio that it’s a sprint I could fight for.
“I had an amazing leadout. Golas started, then Pavel, and Salva was there. All the time I was protected at a high pace and then it was the longest sprint, maybe ever! It was very difficult - I’m more fatigued than yesterday because of the length of that sprint."
“At the end of the day Teuns was on my back and I knew I had to start my sprint earlier than Pascal Ackermann, and that’s how we’ve ended up. Everything worked out.”
Dylan Teuns (BMC) and Enrico Battaglin (LottoNL-Jumbo) fought it out behind to take second and third, with Kwiatkowski extending his lead in yellow to 12 seconds over Teuns.