The German title-holders, displaying an admirable attacking intent, went ahead in the second half through Marco Reus. Jürgen Klopp's team then had further chances to double their lead, but were eventually pegged back by Balotelli's spot-kick.
This game officially pitted together the best team in England against the best in Germany, and it was a statistic undoubtedly borne out by a start to the game that had fans on the edge of their seats. As early as the 21st second, Roman Wiedenfeller was required to palm away Samir Nasri's drive, but it was an assured opening from the German side thereafter and Robert Lewandowski went close with two headed efforts.
On a greasy pitch, the chances continued to arrive for both teams. Pablo Zabaleta was the next City player to threaten, firing wildly over for the hosts after Weidenfeller had denied Sergio Aguero. Yet Jürgen Klopp's team hit back instantly, as Mario Götze's fierce drive was tipped onto the post by home goalkeeper Joe Hart.
End to End
The end-to-end nature of the match continued as the opening half progressed, with Weidenfeller thwarting Aguero again, before Götze was twice frustrated by Hart, the second effort striking the underside of the bar. A truly thrilling first period somehow then ended goalless, as David Silva inexplicably volleyed over from close range and Ilkay Gündogan struck Hart's midriff after a lightning counter-attack.
The half-time interval provided only a brief period of respite as both gaolkeepers were called into action again in the second half. In what was turning into a personal duel, Hart saved yet again from Götze and Weidenfeller held a smart volley from Edin Dzeko, before the plucky away side deservedly went in front.
Hart finally beaten
There seemed to be no danger when Jack Rodwell picked up the ball in midfield, but his attempted pass to Zabaleta was intercepted by Reus and the 23-year-old raced clear to fire Dortmund ahead. The German international then almost made it two, but Hart pulled off an incredible save to divert his effort wide.
By now the away team were clearly on top and even the forced withdrawal of Mats Hummels didn't interrupt their rhythm. Dortmund were creating chances at will and Lewandowski should have put them 2-0 up, but shot wide from Gündogan's sensational defence-splitting pass.
Dortmund hearts broken
As normal time drew to a close though, City were given the chance to haul themselves level, courtesy of a controversial penalty after a shot from Aguero struck Subotic's arm inside the box. Late substitute Balotelli won the war of nerves with Weidenfeller, sending the keeper the wrong way before rolling the spot-kick into the opposite corner to make it 1-1.
There was still time for a last-gasp flurry from the German champs though. Reus volleyed over from Kevin Großkreutz's cross and Hart saved City's bacon once again, pushing a fulminating Lewandowski drive around the post as Dortmund battled to what was, ultimately, a somewhat bitter end from thier point of view
Man City: Hart - Zabaleta, Kompany, Nastasic, Clichy (Balotelli, 81')- Javi Garcia (Rodwell, 34'), Toure, Silva, Nasri (Kolarov, 57')- Aguero, Dzeko
Dortmund: Weidenfeller - Piszczek,Subotic, Hummels (Santana, 54), Schmelzer - S. Bender, Gündogan (Großkreutz, 82'), Blaszczykowski - M. Götze, Reus - Lewandowski
Goals: 0-1 (Reus 61'), 1-1 (Balotelli, pen 90')