Consumption and processing take place on separate threads
Organize consumer by package
Introduce OffsetManager abstraction