Cut the bacon into 1/4-inch pieces and cook in a large pot or Dutch oven over medium heat, stirring occasionally, until the bacon is crispy and has rendered most of its fat, about 8-10 minutes. Remove the bacon with a slotted spoon and set aside, leaving about 2 tablespoons of bacon fat in the pot. Add the diced onion to the hot fat and cook, stirring frequently, until softened and beginning to caramelize at the edges, about 5-7 minutes. This deep sautéing of the onions creates a savory foundation that enhances the soup's overall flavor.
Add the sauerkraut to the pot and cook over medium heat, stirring occasionally, for 5-7 minutes until it darkens slightly and its flavors intensify. Sprinkle the flour over the sauerkraut and cooked onions, then stir constantly for 1-2 minutes to cook out the raw flour taste and create a light roux base that will thicken the soup. I find that this step is crucial—toasting the flour prevents a chalky, bland taste in the finished soup.
Pour the stock into the pot and stir well to incorporate the roux base and prevent lumps from forming. Add the peeled and cubed apple, caraway seeds, cooked bacon from Step 1, and a pinch of salt. The apple provides natural sweetness that balances the tartness of the sauerkraut, while the caraway seeds add the classic German flavor profile. Bring the mixture to a boil over medium-high heat, then reduce heat to low and cover the pot.
Simmer the covered soup over low heat for 20 minutes, stirring occasionally, until the apple is completely tender and the flavors have melded together. Taste the soup and adjust seasoning with salt and freshly ground black pepper to your preference. I like to add pepper at the end rather than during cooking because it allows me to control the exact heat level and prevent it from becoming harsh.
Ladle the hot soup into bowls and serve immediately. The soup is best enjoyed fresh, with the apple pieces and sauerkraut providing texture throughout each spoonful.