Championship duellists Sebastian Buemi and Romain Grosjean were second and third.
James Jakes made a poor start from pole position on a damp track. While he tried to cover an attack from second-placed Yelmer Buurman, Nico Hülkenberg mugged the pair of them and shot into the lead.
Jakes slipped back to fourth while Hülkenberg made his escape. Yann Clairay moved into second but Buurman quickly passed him.
Clairay then ran wide on the damp circuit and hit the barrier nose-first, tearing his front wing off. He limped into the pits and took the opportunity to switch to wet tyres as the rain got heavier.
That left Jakes third ahead of Romain Grosjean, but the Frenchman made a bold move around the outside of Tarzan to grab the place.
Buurman managed to get Hülkenberg’s lead down to under a second by lap seven. By now the rain was really picking up and Jakes pitted for wet weather tyres.
It looked like a smart move as the remaining drivers on slick tyres were crawling into the pits, and Kobayashi spun off into the barriers.
Hülkenberg pitted from the lead on lap eight but Buurman stayed out, hoping the rain would ease. Staying out gave him a lead of almost 50 seconds, but Hülkenberg cut seven seconds out of that on his first flying lap.
But the rain continued to fall and Buurman ran very wide on lap 14. Hülkenberg took the lead off him and Buurman began to slip down the order. He lost second place to Sebastian Buemi and third to championship leader Grosjean .
Now Buemi set off after Hülkenberg, taking seconds off him on each lap as the German struggled in traffic. With eight minutes left the gap was a little over five seconds.
The rain got heaver with every lap and Buemi’s progress towards Hülkenberg came to a halt, partly thanks to Cyndie Alleman, who held the Swiss up for several laps.
Hülkenberg’s lead was back up to over eight seconds by the time he took the chequered flag for his second win of the year.
Buemi was comfortably second ahead of Grosjean, with Tom Dillman, Renger van der Zande and James Jakes completing the points-scoring top six. Buurman’s gamble failed, leaving him 16th.