Partición de un flujo

Para aprovechar al máximo la capacidad del servicio Streaming para operar a escala, configura el número de particiones en el flujo.

Antes de crear un flujo, tenga en cuenta el rendimiento de flujo esperado, la estrategia de clave de partición y cómo se consumirá el flujo. La mayoría de los valores de configuración no se pueden cambiar después de crear el flujo. Por ejemplo, después de crear un flujo, no es posible cambiar el tiempo de retención de mensajes ni el número de particiones.

Particiones y rendimiento

Al crear un flujo, debe especificar cuántas particiones tiene el flujo. El rendimiento esperado de la aplicación puede ayudarle a determinar el número de particiones para su flujo.

Multiplique el tamaño medio del mensaje por el número máximo de mensajes escritos por segundo para calcular el rendimiento esperado. Debido a que una única partición está limitada a un ratio de escritura de datos de 1 MB por segundo y 5 solicitudes GET por segundo por grupo de consumidores, un mayor rendimiento requiere más particiones para evitar la limitación. Tenga en cuenta los límites adicionales de Streaming al tomar decisiones de diseño.

Consejo

Para ayudarle a gestionar los picos de aplicación, recomendamos asignar un número ligeramente superior de particiones a su rendimiento máximo.

Publicación en particiones

El contenido de los mensajes que desea publicar en un flujo también puede ayudarle a determinar cuántas particiones debe tener el flujo.

Un mensaje se publica en una partición del flujo. Si hay más de una partición, se calcula la partición donde se publicará el mensaje con la clave del mensaje.

Para obtener más información, consulte Publicación de mensajes.

Asignación de clave a partición

Los mensajes con la misma clave van a la misma partición. Los mensajes con claves diferentes pueden ir a particiones diferentes o a la misma partición. Si no especifica una clave, Streaming reconoce la clave nula y genera una clave aleatoria en nombre del usuario. Si un usuario publica el mismo mensaje dos veces, este podría ir a diferentes particiones, porque se genera una clave completamente nueva. No debe esperar que todos los mensajes con una clave nula vayan a la misma partición.

Por defecto, Streaming proporciona una distribución uniforme y predecible de los mensajes a las particiones de un flujo. Las API de Streaming no te permiten especificar exactamente en qué partición se publican los datos, porque esto puede conllevar el riesgo de crear un punto de acceso a una sola partición si un usuario no conoce los matices de Streaming. Sin embargo, si utiliza las API de Kafka para interactuar con Streaming, puede realizar particiones personalizadas y asignar explícitamente mensajes a particiones, aunque no lo recomendamos.

Claves de partición efectivas

Para garantizar una distribución uniforme de los mensajes, necesita valores efectivos para las claves de mensaje. Para crear un valor efectivo, considere la selectividad y la cardinalidad de sus datos de Streaming.

Cardinalidad: considere el número total de claves únicas que podrían generarse en función del caso de uso específico. Una cardinalidad de clave mayor generalmente significa una mejor distribución.

Selectividad: considere el número de mensajes con cada clave. Una mayor selectividad significa más mensajes por clave, lo que puede dar lugar a puntos de acceso.

Debe buscar siempre una cardinalidad alta y una selectividad baja.

Ordenación

Se garantiza que los mensajes con la misma clave se almacenan en el orden en que se publican y que se entregan a los consumidores en el mismo orden en que se produjeron. Puesto que los mensajes con la misma clave van a la misma partición, esta garantía solo se aplica en el nivel de partición.

Particiones y grupos de consumidores

Si uno o más grupos de consumidores consumirán su flujo, factorícelo en su decisión sobre el número de sus particiones. Las lecturas de particiones se equilibran entre las instancias de un grupo de consumidores.

Los grupos de consumidores solo pueden utilizar una única instancia a la vez si el flujo tiene una sola partición. Si el flujo tiene varias particiones, puede escalar verticalmente el número de instancias hasta el número de particiones y tener una instancia en el grupo que lea de una partición del flujo.

Para obtener más información, consulte Uso de grupos de consumidores.