1. Confluent Documentation, Apache Kafka® Internals: "One of the brokers in the cluster is designated as the controller. The controller is responsible for electing a leader for each partition." This statement confirms the single-controller design.
Source: Confluent Documentation, "Apache Kafka Internals" section.
2. Kreps, J., Narkhede, N., & Rao, J. (2011). Kafka: A Distributed Messaging System for Log Processing. In Proceedings of the NetDB '11: 6th International Workshop on Networking Meets Databases. "One of the brokers is elected as the 'controller'. This controller detects broker failures and is responsible for electing new leaders for all partitions on the failed broker."
Source: Section 3.2, "Distribution".
3. Narkhede, N., Shapira, G., & Palino, T. (2017). Kafka: The Definitive Guide. O'Reilly Media. "The controller is a broker that has additional responsibilities... At any given time, there is only one controller in a Kafka cluster."
Source: Chapter 6, "Data Delivery", section "Replication".