You already have managed building an accounting engine satisfying your financial data integrity and consistency requirements. With this, it should be feasible to parallelize processing.
You would need
- a new dispatcher component which would be responsible for feeding multiple threads with to-be-processed event data while maintaining consistency (i.e. bill each event exactly once) and
- a new aggregator component for muxing the rated events on the accounts.
Typically the aggregator component will become the bottleneck in your parallel architecture.
Since you explicitly intend to build a multi-thread application: Depending on requirements and environment it might be feasible to build a multi-process design, i.e. have several independent processes running in parallel. You would gain a simpler concurrency model versus the evemtual need for interprocess communication.
Virtually all telecom billing systems scale by multi-threading or multi-processing so this is definitelly a sane way forward.