Estoy ejecutando Apache Kafka dentro de una red docker. El contenedor del corredor de Kafka se llama docker_kafka. Lo que quiero es permitir conexiones de clientes Kafka desde otro contenedor docker, así como desde el host docker. El puerto 9092 de docker_kafka se ha asignado al host docker.
He estado probando las variables de entorno KAFKA_LISTENERS y KAFKA_ADVERTISED_LISTENERS . Por ejemplo, cuando uso KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 , otro cliente docker kafka no puede conectarse a kafka mediante PLAINTEXT://docker_kafka:9092 y viceversa. No permite varias direcciones con el mismo número de puerto y protocolo.
¿Hay alguna manera de permitir ambos tipos de conexiones?
Es posible configurar múltiples oyentes en Kafka. Una opción listener.security.protocol.map permite usar el mismo protocolo de seguridad varias veces en la configuración de los oyentes.
Usando variables de entorno:
1. Defina las asignaciones a tantos alias de oyentes como sea necesario:
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER1:PLAINTEXT,LISTENER2:PLAINTEXT2.Luego, configure los oyentes usando los alias. Efectivamente, para que esto funcione, cada oyente necesita escuchar en su propio host+puerto:
KAFKA_LISTENERS: LISTENER1://0.0.0.0:9092,LISTENER2://0.0.0.0:90933. Configure según los oyentes anunciados. Por ejemplo:
KAFKA_ADVERTISED_LISTENERS: LISTENER1://hostname1:9092,LISTENER2://hostname2:90934. Finalmente, para que el clúster funcione, necesita saber qué escucha usar para la comunicación entre los nodos:
KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER1 Tenga en cuenta que solo pude hacer que esta configuración funcione si el oyente está declarado en la dirección de transmisión ( 0.0.0.0 ). Intenté declarar al oyente para escuchar en un nombre de host fijo, pero esto hizo que mi configuración no funcionara (obtuve errores de connection refused ). Con mucho gusto agradecería un comentario explicando esta parte.
No soy el autor de esta idea (y no me atribuyo el mérito). Encontré esta solución en esta publicación de blog: https://www.kaaproject.org/kafka-docker/
Documentación de configuración de Kafka: https://kafka.apache.org/documentation/#configuration (busque la opción listener.security.protocol.map ).