Combine the flour, brown sugar, cinnamon, and salt.
Add the butter, and mix until crumbs form. Refrigerate while you prepare the filling and cake batter.
To make the cream cheese filling:
Using an electric mixer on medium speed, beat the cream cheese and brown sugar until light and fluffy.
Mix in the vanilla and cinnamon. Set aside.
To make the cake:
Preheat the oven to 350°F (175°C). Grease a 9x13-inch baking pan. If you like, line the pan with parchment paper.
Whisk together the flour, baking powder, baking soda, cinnamon, and salt. Set aside.
Using an electric mixer on medium speed, beat the butter and sugar until light and fluffy.
Add the eggs one at a time, mixing until combined after each addition. Mix in the vanilla and almond extracts.
Combine the sour cream and milk in a small bowl.
With the mixer on low speed, add the flour mixture in three portions, alternating with two portions of the sour cream mixture. Mix just until combined.
To assemble and bake:
Spread half of the cake batter evenly in the prepared pan.
Dollop the cream cheese mixture over the batter, and spread gently to cover.
Spoon the remaining cake batter over the filling, and spread gently to cover.
Sprinkle the crumb topping evenly over the top.
Bake 38 to 42 minutes, or until the center is set and a tester inserted into the center comes out with just a few moist crumbs.
Place the pan on a wire rack and allow the cake to cool before serving.
Notes
Optional nuts: Add 1/2 cup chopped pecans or walnuts to the crumb topping.
Store leftovers in an airtight container in the refrigerator up to 4 days.
Recipe update: This longtime reader favorite has been updated with a softer, more flavorful cake, more cream cheese filling, and a more generous crumb topping.