es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comportamiento del espacio clave al agregar nuevas particiones dinámicamente en un tema de Kafka.

Kafka admite la adición dinámica de nuevas particiones a un tema. Supongamos que inicialmente tengo un tema T con dos particiones P0, P1 y un espacio de claves de tres claves K0, K1, K2. Supongamos además que estoy usando algún tipo de particionador de hash módulo 2 (número de particiones) en el productor que asigna (K0) a P0 y (K1, K2) a P1. Supongamos además que tengo dos consumidores C0 para P0 y C1 para P1. Para simplificar, los consumidores están realizando una agregación básica basada en claves (almacenada en algún KV).

Después de algún tiempo, supongamos que agregué una nueva partición P2 a T. Ahora, mi productor automáticamente (una vez que detecta el nuevo número de particiones) utilizará el mismo particionador de hash módulo 3. Entonces, supongamos ahora que las asignaciones clave-partición se convierten en (K0, P0), (K1, P1), (K2, P2).
1. En tales casos, ¿qué sucedería con los valores de K2 ya escritos en P1 (antes de la adición de la nueva partición P2)? Y, ¿qué sucedería si quisiera que todos los registros de claves iguales se asignen siempre a la misma partición, incluso cuando se agrega una nueva partición al tema? Es decir, no quiero que mis registros de K2 se distribuyan entre las particiones P1 y P2. ¿Proporciona el framework de Kafka alguna garantía en este sentido? ¿O la aplicación debe manejar este requisito?

  1. Cuando se agrega la nueva partición P2 y las asignaciones clave-particiones se convierten en (K0, P0), (K1, P1), (K2, P2), se desencadenará un proceso de reequilibrio. Como resultado del reequilibrio, supongamos que P2 se asigna a C0. Entonces, ¿cómo podría C0 obtener el valor agregado más reciente para K2 del almacén KV en C1 en lugar de reiniciar desde un estado inicial? En dicho escenario, ¿está garantizada la redistribución de estado a los consumidores apropiados por Kafka? ¿O debe ser manejada por la aplicación en caso de que exista?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai
    1. Cuando se agrega una nueva partición a un tema, Kafka reasignará las particiones existentes a los consumidores existentes y nuevos de manera equilibrada. Esto significa que la partición existente P1 se dividirá en dos nuevas particiones, P1 y P2, y las claves K1 y K2 se redistribuirán entre estas particiones utilizando el particionador de hash modulo 3. Esto significa que algunos de los valores K2 que antes estaban almacenados en P1 ahora se almacenarán en P2. Si desea que todos los registros con la misma clave siempre se asignen a la misma partición, puede lograrlo mediante el uso de un particionador personalizado que tome la clave como entrada y devuelva un ID de partición fijo basado en la clave. Kafka no proporciona esta garantía de forma predeterminada, por lo que la aplicación debe manejar este requisito.

    2. Cuando se activa un proceso de reequilibrio, Kafka redistribuirá las particiones entre los consumidores disponibles. En el ejemplo dado, P2 se asigna a C0 en lugar de C1. Si C0 necesita obtener el valor agregado más reciente para K2 desde el almacenamiento de KV en C1, esto se puede lograr utilizando Kafka Streams. Kafka Streams proporciona operaciones de procesamiento con estado que le permiten crear y mantener una tienda de estado compartida entre muchas instancias de su aplicación. Cuando se reasigna una partición, Kafka Streams volverá a organizar automáticamente el estado en las instancias correspondientes. Sin embargo, si no está utilizando Kafka Streams u otro marco similar, este proceso de reorganización deberá ser manejado por la aplicación.

Comments are closed.