You should aim to have one StoreClientFactory per process.
The factory provides client instances which can speak to any number of stores. The thread pool, connection pool and other shared resources are at the factory level, not client level.
All configurations and tuning parameter are also at the factory level. If you wish to support many use cases which have different configuration needs from within the same process, then it makes sense to have a single factory for each use case, each configured
differently.
You should not be too concerned with client re-use, as long as you re-use the same factory.
BTW, if you have a stream processing use case that needs to interact with a non-trivial amount of state, I encourage you to consider using stateful Samza processors, which have been engineered for exactly that purpose, with very desirable performance, fault-tolerance
and operability characteristics. If you already have a large investment in Spark Streaming that may not be an option, but I thought it was worth mentioning (:
Let us know if you have other questions (: