Despite getting off the line better, Rosberg trailed Hamilton into the first corner, although the reigning champion had to take to the grass after locking up his brakes. Rosberg too, left the track after contact with Max Verstappen although held on to second.
During the safety car period, Daniel Ricciardo opted to pit, while the rest of the field stayed on track.
When the race resumed, Hamilton was able to build a gap, despite worried over the condition of his brakes.
The Brit pulled out a gap big enough that he held onto the lead following the cycle of pit stops, while the Red Bulls of Max Verstappen and Daniel Ricciardo initially closed up to Rosberg in the other Mercedes.
Ricciardo's early pit stop allowed Sebastian Vettel to move ahead, setting up one of the most controversial moments of the season.
On lap 68, Verstappen in third place locked up at turn one, taking to the grass as a result. Vettel who was close behind felt that he should be handed the position, and Verstappen was initially advised by his team to give the place over.
Verstappen however held onto the final podium spot. Meanwhile, his team mate Ricciardo closed in on Vettel who was fighting to snatch third, only for the two to touch under braking. Both managed to maintain their positions despite the contact.
After the incidents, Vettel launched into a foul mouth tirade over the radio, aimed at both Verstappen and race director Charlie Whiting. The Ferrari driver exchanged hand signals with Verstappen as the pair crossed the line.
After the race, Verstappen was in the 'cool down room' waiting to go to the podium, when news filtered through that he was given a five second penalty, dropping him to fifth and giving the final podium place to Vettel, with Ricciardo maintaining fourth between the pair.
Behind the the top five was Kimi Raikkonen in sixth, capping off a relatively positive race for Ferrari after a slump in qualifying.
Sauber again missed out on points, with Marcus Ericsson in 11th place and Felipe Nasr in 15th. In between them were the McLarens of Jenson Button and Fernando Alonso, who failed to score despite their double points finish in Austin just a week ago, and the Renault of Jolyon Palmer.
Carlos Sainz finished in 16th. He was handed a five second penalty early in the race for forcing Alonso off the track on the opening lap.
Hamilton's win means that the points gap between him and Rosberg has been narrowed down to just 19 points with just tow races remaining. However if Rosberg wins in Brazil in two weeks time, he will be crowned champion, regardless of where Hamilton finishes.
Bahrain International Circuit - Winter testing