Apache Kafka se ha consolidado como una parte integral de muchos sistemas y soluciones en los últimos años, abarcando redes, servidores web, big data, entre otros. Su arquitectura y implementación lo convierten en una herramienta robusta, tolerante a fallos y escalable. Esto facilita la organización más eficiente de flujos de datos y canalizaciones para manejar grandes volúmenes de información. No es sorprendente que Apache Kafka haya crecido rápidamente en popularidad, generando un ecosistema con docenas de herramientas, marcos de trabajo y complementos a su alrededor.
Kafka Connect y el Plugin Mirror Maker 2.0
Kafka Connect es una herramienta para transmitir datos de manera escalable y confiable entre Apache Kafka y otros sistemas de datos. A través de conectores, que son plugins que proporcionan integración con sistemas de terceros, es posible lograr la integración sin necesidad de programar, simplemente mediante la creación de algunos archivos de configuración.
Uno de estos conectores es Mirror Maker 2.0, diseñado específicamente para replicar temas de Kafka a otro clúster de Kafka. Aunque pueda parecer curioso replicar Kafka a Kafka, esta necesidad surge en situaciones donde es esencial replicar algunos temas a un clúster externo sin proporcionar acceso directo desde el clúster externo a los temas originales.
Ingredientes para la Configuración
La mejor opción para implementar localmente todos los servicios de este tutorial es utilizar Docker. A través de un archivo de configuración Docker Compose, desplegaremos los servicios esenciales:
- Apache Kafka (2 unidades)
- Apache Zookeeper (2 unidades)
- Kafka Connect (1 unidad)
Convenientemente, Confluent proporciona imágenes de Docker para estos servicios, lo que simplifica la configuración mediante variables de entorno.
# Extracto de docker-compose.yml
version: '2'
networks:
kafka_network:
name: kafka-network
services:
zookeeper:
# Configuración para Zookeeper
broker:
# Configuración para el primer broker de Kafka
broker2:
# Configuración para el segundo broker de Kafka
connect:
# Configuración para Kafka Connect
Configuración de Kafka Connect
Kafka Connect requiere una configuración específica para funcionar correctamente. Utilizaremos variables de entorno en el archivo Docker Compose para especificar parámetros clave, como los servidores de arranque de Kafka, el puerto REST, el grupo de Kafka Connect, entre otros.
# Configuración de Kafka Connect en Docker Compose
connect:
image: confluentinc/cp-kafka-connect:6.2.0
hostname: connect
container_name: connect
networks:
- kafka_network
depends_on:
- zookeeper
- broker
ports:
- "28082:28082"
- "9998:9998"
- "9999:9999"
- "18889:18889"
environment:
- CONNECT_BOOTSTRAP_SERVERS=broker:29092
- CONNECT_REST_PORT=28082
# Otras configuraciones...
Creación del Tema de Prueba y Configuración del Conector
Antes de iniciar el proceso de replicación, necesitamos un tema en la instancia de Kafka y un flujo de datos para ese tema. Crearemos el tema y utilizaremos el conector Mirror Maker 2.0 para replicar los datos.
# Creación del tema en el primer broker
docker exec -it broker /bin/bash
kafka-topics --create --topic to_replicate --bootstrap-server broker:29092
# Envío de mensajes al tema para simular datos
while [[ true ]]; do
echo "$RANDOM" | kafka-console-producer --topic to_replicate --bootstrap-server broker:29092
sleep 1
done &
Luego, configuraremos el conector Mirror Maker 2.0 mediante un archivo JSON que define los parámetros clave del conector.
// Contenido del archivo connectors.json
{
"name": "test_mirror",
"config": {
"connector.class": "org.apache.kafka.connect.mirror.MirrorSourceConnector",
"name": "test_mirror",
"source.cluster.alias": "source",
"topics": "to_replicate",
"source.cluster.bootstrap.servers": "broker:29092",
"target.cluster.bootstrap.servers": "broker2:29093",
"producer.override.bootstrap.servers": "broker2:29093",
"offset-syncs.topic.replication.factor": "1"
}
}
Inicio del Proceso de Replicación
Finalmente, iniciaremos el proceso de replicación utilizando la API REST de Kafka Connect. Realizaremos una solicitud POST con la configuración del conector.
# Creación del conector mediante la API REST de Kafka Connect
cat connectors.json | curl -X POST -H 'Content-Type: application/json' localhost:28082/connectors --data-binary @-
# Verificación de la creación del conector
curl localhost:28082/connectors
Validación del Proceso de Replicación
Verificaremos que el proceso de replicación se ha completado correctamente revisando el segundo broker y observando la presencia del tema replicado.
# Verificación de la existencia del tema replicado en el segundo broker
docker exec -it broker2 /bin/bash
kafka-topics --list --bootstrap-server broker2:29093
# Consumo de mensajes del tema replicado para asegurar la replicación
kafka-console-consumer --topic source.to_replicate --bootstrap-server broker2:29093
¡Felicidades! Ahora sabe cómo configurar y utilizar Mirror Maker 2.0 para replicar temas de Kafka a otro clúster de Kafka. Este tutorial proporciona una guía detallada para una configuración básica, pero hay más posibilidades y ajustes avanzados que se pueden explorar para adaptarse a requisitos específicos. Si desea obtener más información sobre las capacidades de configuración, ajustes de rendimiento o monitoreo, no dude en preguntar en los comentarios. Estamos aquí para ayudarle a aprovechar al máximo Mirror Maker 2.0 en su entorno.