How does Event-Driven Architecture allow applications to respond to events in real time? What role do event producers, consumers, message brokers, and event processing play in this architecture? What challenges can developers face when managing event ordering, duplicate messages, and system reliability?