Visión de conjunto
Es fácil agregar un servidor a un clúster de Kafka, simplemente asígnele un ID de agente único y luego inicie Kafka en el nuevo servidor. Sin embargo, no se asignan particiones de datos automáticamente a estos nuevos servidores, por lo que, a menos que las particiones se muevan a ellos, no harán ningún trabajo hasta que se cree el nuevo tema. Por lo tanto, normalmente al agregar equipos al clúster, deberá migrar algunos datos existentes a estos equipos.
El proceso de migración de datos se inicia manualmente pero es completamente automático. Detrás de escena, Kafka agregará el nuevo servidor como seguidor de la partición a migrar y le permitirá replicar completamente los datos existentes en esa partición. Una vez que el nuevo servidor copia completamente el contenido de la partición y se une a la copia sincronizada, una de las copias existentes eliminará los datos de su partición.
La herramienta de reasignación de particiones se puede utilizar para mover particiones entre agentes. La asignación de partición ideal garantizará una carga de datos y un tamaño de partición uniformes entre todos los agentes. La herramienta de redistribución de particiones no tiene la capacidad de estudiar automáticamente la distribución de datos en el clúster de Kafka y mover las particiones para lograr una distribución uniforme de la carga. Por lo tanto, el administrador debe determinar qué temas o particiones deben moverse.
La herramienta de reasignación de particiones se puede ejecutar en 3 modos mutuamente excluyentes:
- generar: en este modo, dada una lista de temas y una lista de agentes, la herramienta genera reasignaciones de candidatos para mover todas las particiones del tema especificado al nuevo agente. Dada una lista de temas y agentes de destino, esta opción solo proporciona una forma conveniente de generar un plan de reasignación de partición.
- ejecutar: En este modo, la herramienta iniciará la reasignación de particiones de acuerdo con el plan de reasignación proporcionado por el usuario. (Utilice la opción --reassignment-json-file). Este puede ser un plan de redistribución personalizado hecho a mano por el administrador, o puede proporcionarse mediante la opción --generate
- Verificar: En este modo, la herramienta verificará el estado de reasignación de todas las particiones enumeradas durante la última ejecución. El estado se puede completar con éxito, fallar o en progreso
Migración de particiones:
Crea un tema con tres particiones y dos réplicas
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 3 --topic topic_test
Ver tema
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic_test
Escribir archivos de migración
vi topics-to-move.json
topics-to-move.json:
{
"topics": [{
"topic": "topic_test"}], "version":1}
Una vez que el archivo json esté listo, use la herramienta de reasignación de particiones para generar asignaciones candidatas
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file topics-to-move.json --broker-list "1,2" --generate
Current partition replica assignment
{
"version":1,"partitions":[{
"topic":"topic_test","partition":2,"replicas":[2,0],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":1,"replicas":[1,2],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":0,"replicas":[0,1],"log_dirs":["any","any"]}]}
Proposed partition reassignment configuration
{
"version":1,"partitions":[{
"topic":"topic_test","partition":0,"replicas":[2,1],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":2,"replicas":[2,1],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":1,"replicas":[1,2],"log_dirs":["any","any"]}]}
La herramienta genera una asignación de candidato y mueve todas las particiones del tema topic_test al agente 1,2. Pero tenga en cuenta que el movimiento de partición aún no ha comenzado en este momento, solo le indica la asignación actual y la nueva asignación propuesta. La asignación actual debe guardarse en caso de que desee revertirla. La nueva asignación debe guardarse en
un archivo json (por ejemplo, expand-cluster-reassignment.json) para ingresar a la herramienta usando la opción --execute para
guardar la asignación actual
vi old-expand-cluster-reassignment.json
old-expand-cluster-reassignment.json:
{
"version":1,"partitions":[{
"topic":"topic_test","partition":2,"replicas":[2,0],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":1,"replicas":[1,2],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":0,"replicas":[0,1],"log_dirs":["any","any"]}]}
vi expand-cluster-reassignment.json
expand-cluster-reassignment.json:
{
"version":1,"partitions":[{
"topic":"topic_test","partition":0,"replicas":[2,1],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":2,"replicas":[2,1],"log_dirs":["any","any"]},{
"topic":"topic_test","partition":1,"replicas":[1,2],"log_dirs":["any","any"]}]}
Realizar migración
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --execute
Vea los resultados de la migración,
puede ver que la partición se ha migrado correctamente,
también puede ver los resultados a través de comandos
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --verify
Copiar migración
Primero necesitamos restaurar la partición original
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file old-expand-cluster-reassignment.json --execute
Luego migre la copia 2 a la partición 0 y
escriba el archivo de migración
vi increase-replication-factor.json
aumentar-factor-de-replicación.json:
{
"version":1,"partitions":[{
"topic":"topic_test","partition":0,"replicas":[0,1,2]}]}
Realizar migración
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute
Puede ver que la copia 2 se ha migrado correctamente a la partición 1.