Design a system that can ingest, process, and analyze terabytes of data daily. Focus on the overall architecture for both batch and stream processing, strategies for data partitioning and distribution, and how to handle data consistency and fault tolerance in a distributed environment.