Bayern Munich completed a decade of domestic dominance by beating main rival Borussia Dortmund 3-1 to seal a record-extending 10th consecutive Bundesliga title.
Goals from Serge Gnabry, Robert Lewandowski and Jamal Musiala sent Bayern an unassailable 12 points clear of second-placed Dortmund with three games of the season remaining.
It was Bayern's eighth consecutive league win over Dortmund, which hasn't won a game in Munich since 2014.
Bayern's 10th straight German championship is a record among Europe's top five leagues, eclipsing the nine Serie A titles in a row by Juventus from 2012-20.
Bayern's players celebrated with the customary beer showers. French defender Benjamin Pavard was the first to douse Julian Nagelsmann with beer after the coach's first title in charge.
The 34-year-old Nagelsmann is the second youngest coach to win the Bundesliga. Dortmund's Matthias Sammer was a few days younger in 2002.
Though Dortmund had little hope left of catching the Bavarian powerhouse, Marco Rose's players wanted to delay their rivals' title celebrations for another day. But the visitors were left to rue the cost of individual mistakes and missed opportunities.
Both Rose and defender Emre Can were booked toward the end of the first half as referee Daniel Siebert reacted to fraying tempers
Dortmund started well but Bayern scored with its first corner of the game in the 15th minute when Leon Goretzka cushioned the ball back for Gnabry. The unmarked Germany forward took it on his thigh then let fly with a volley inside the left post.
Erling Haaland missed a good chance for Dortmund before Gnabry had a second goal ruled out through VAR for offside in the 30th.
The home fans didn't have to wait long as Gnabry pressured Dortmund's Dan-Axel Zagadou into a bad pass in the 34th. The ball fell for Thomas Müller, who set up Lewandowski for his 33rd goal of the season.
Can converted a penalty to revitalize Dortmund hopes early in the second half, when the visitors played with much more urgency.
But a possible second penalty wasn't given despite Pavard bringing down Jude Bellingham while attempting to reach the ball.
Haaland again went close for Dortmund before Musiala sealed the result – and the title – in the 83rd.
Greuther Fürth was relegated after losing at home to Champions League candidate Bayer Leverkusen 4-1.
Jetro Willems gave the enthusiastic home fans some hope of a miraculous escape with the opening goal in the fifth minute, but Patrik Schick answered four minutes later and Sardar Azmoun, Paulinho and Exequiel Palacios piled on for the visitors.
Fürth remained bottom of the league after 31 games – 12 points from safety with three games remaining.
Coach Stefan Leitl's team was promoted last year when it finished second in the second division, but it never recovered from a poor start to the Bundesliga despite encouraging performances in the second half of the season. Fürth lost all but one of its first 14 games until it claimed its first win in the 15th round by beating Union Berlin.
UNION BEATS LEIPZIG
Union came from behind thanks to substitute Sven Michel to beat Leipzig 2-1 away and atone for its loss to Leipzig in their German Cup semifinal on Wednesday.
Michel equalized in the 86th then set up Kevin Behrens with his heel for a dramatic winner in the 89th as Union won in Leipzig for the first time.
The end of Leipzig's 15-game unbeaten run across all competitions allowed Leverkusen to reclaim third place. Leverkusen dropped to fourth last weekend with a loss at home to Leipzig, but the sides have switched positions again, leaving Leipzig in the last qualification place for the Champions League.
Freiburg was fifth after an exciting 3-3 draw with Borussia Mönchengladbach. Freiburg came from two goals down to lead 3-2 only to concede in injury time to Gladbach's Lars Stindl.
Cologne won 3-1 against Arminia Bielefeld, which remained second from bottom and the favorite to join Fürth in the second division.
Also, Eintracht Frankfurt drew with Hoffenheim 2-2.