Manchester City scored in stoppage time to sensationally win 2-1 at Arsenal, who had Gabriel Magalhaes sent off during a game-changing and remarkable five minutes of play.
Arsenal took a first-half lead when Bukayo Saka scored his fourth goal in three Premier League games, but they could have been in front earlier had they been awarded a penalty after 10 minutes.
City keeper Ederson appeared to foul Martin Odegaard, but having been checked by VAR, it was decided Edersen had touched the ball and no penalty was given.
The Gunners remained in control of the match until an incredible five minutes of action after half-time.
Bernardo Silva went down in the penalty area under a challenge from Granit Xhaka that was originally waved away by Stuart Attwell but he overturned his decision on the advice of VAR which led to Riyad Mahrez equalising from the spot.
Just 90 seconds later, Nathan Ake made a heroic and unlikely clearance off the line and Gabriel Martinelli somehow failed to score from the rebound. Then the game took another turn when Gabriel Magalhaes picked up a second booking for disrupting a Manchester City counter-attack.
It left Pep Guardiola's men with 34 minutes to break down the Arsenal 10-men but a goal didn't look likely until the clock ticked past 90 minutes and Rodri forced home a late winner.
His celebrations in front of the Arsenal end triggered some ugly scenes as bottles were thrown onto the pitch.
The result means City have won 11 games on the spin in the Premier League and puts them 11 points clear of Chelsea, who play Liverpool on Super Sunday.
How City smashed and grabbed in a volatile affair...
Both these teams came into the contest with expert records defensively in first halves. Since the Aaron Ramsdale, Ben White and Gabriel axis was formed 16 games ago, Arsenal have not conceded a goal before the 38th minute while Man City had conceded just one first-half goal all season. Those records did not look overly in danger of being added to in a very watchable half but one did not offer much goalmouth action.
Ruben Dias had City's best moment, flicking a Raheem Sterling cross wide of the post with Ramsdale flapping mid-air whilst Kevin De Bruyne whipped a ferocious effort just past the post on 19 minutes.
In between those chances, Odegaard had what looked a good shout for a penalty when Ederson came racing out to make a tackle at his feet but VAR deemed from the 10 replays shown that he just about got enough of the ball.
Arsenal were standing strong and started to work their attacking transitions to greater effect as the half wore on. It led to the opening goal on 31 minutes.
Kieran Tierney worked himself into space down the left and sent over an intelligent low cross that was met with a swipe of Saka's left foot that took the ball straight into the corner. It was another example of the game-changing quality the 20-year-old youngster possesses.
Gabriel Martinelli then teased Joao Cancelo down his flank and poked an effort across Ederson that was inches away from giving the Gunners a two-goal cushion at the break.
There was no immediate reaction from City after the break as Arsenal looked well drilled in their shape. Then the game changed on 53 minutes when Silva danced around Xhaka and into the penalty area.
There was a coming-together and a slight pull on the shirt of Silva but initially, Atwell waved it away before being asked to review the incident on the pitchside monitor, where he reversed his decision and awarded the penalty. Tempers flared in the aftermath as the incident was shown on the big screen and Gabriel picked up a yellow card.
Mahrez stroked home the penalty to give City a route back into the match without playing particularly well. It was almost 2-1 to Arsenal moments later but Ake made a miraculous clearance off his goal-line after Aymeric Laporte had headed one over Ederson. How Martinelli missed the rebound from five yards out with the goal gaping will be talked about for years to come at The Emirates.
That wasn't the end of the mid-half drama as Gabriel was given his marching orders when stopping a City counter in midfield to pick up his second yellow card within 90 seconds.
It was expected that City would lay siege to the Arsenal 10 men in the final quarter but with Xhaka dropping back to centre-back, Arsenal defended their box brilliantly. City failed to trouble Ramsdale with any shots of intent - until the 91st minute when they nicked the game in dramatic fashion.
A ball into the box bobbled into the path of Rodri, who got a toe to the ball to force it past Ramsdale and into the corner. He roared away in celebration towards the Arsenal fans, who responded by throwing multiple bottles in the direction of the City players in an ugly finish to the game.
City left it late, but that's what champions do.
What the manager said
Manchester City boss Pep Guardiola said: "They were better. We faced a team that in the last years struggled to be in the top four and they started the season being in the bottom. And now they're in the four. They had six, seven days after last game against Norwich… we had two days and a half and Brentford was so tough. And we didn't have energy.
"We tried to put one more player in the middle to have more control, and more passes because we know the transitions with Saka, Martinelli, Lacazette, the physicality they have should be difficult and was difficult because we didn't have anything.
"We tried and tried and in the second half, one minute changed it. The penalty and after the action for the own goal and the sending off… people will try to analyse many things, but the coin sometimes falls down on your side sometimes the other side. That's the reality. In the same time, we know what it means to win here at the Emirates against Arsenal."
Opta stats
What's next?
Arsenal host Liverpool in the first leg of the Carabao Cup semi-finals live on Sky Sports Football from 7pm on Thursday; kick-off at 7.45pm.
Manchester City's next game is a trip to League Two Swindon Town in the FA Cup third round on Friday; kick-off at 8pm.