Heat up the milk until it’s lukewarm (100°F). Pour the warm milk into the bowl of a stand mixer fitted with a dough hook attachment and sprinkle the yeast and the sugar on top of the milk. Give it a light stir (with a spoon) and let it sit for 2 minutes.
With the mixer running at low speed, add the softened butter, eggs, egg yolks, vanilla, salt, and rum. Mix until everything is well incorporated.
Add the flour and knead on low speed for 3 minutes until a soft, slightly sticky dough has formed.
Put the dough in a greased bowl, cover it with plastic wrap, and place it in a warm environment to rise until doubled, about 30 minutes to 1 hour.
Once doubled in size, remove the dough from the bowl and turn it out onto a lightly floured surface. Knead the dough to release any air bubbles and then roll the dough out until it’s about as thick as a finger. Use a glass or something else approximately 3 inches in diameter to cut out 20 dough circles. Arrange them on your lightly floured surface so they don’t stick to it, then loosely cover them with plastic wrap and allow to rise until doubled in size and puffy, about 30 minutes.
Heat oil in a deep fryer to 320°F (160°C). If you don’t have a deep fryer, you can use a normal deep pot. Be careful, don’t fill up the oil higher than 1/3 and be sure to control the temperature with a cooking thermometer. If the oil gets too hot your donuts will get too dark and if it’s too low they won’t cook through.
Put 2-3 dough balls into the hot oil. Fry them for 3 minutes on one side. Try not to get oil on the top of the donut while frying the bottom, it won’t rise properly. Flip them and fry the other side for 2 minutes. Use a slotted spoon to transfer the donuts to paper towels to drain. Test the first donut to be sure it is completely cooked and adjust the frying time if necessary.
Fill the German donuts with your favorite filling. A piping bag with an extra-long tip works best.
Dust with powdered sugar and serve on the same day!