Protocols & Binary Serialization

Calcular partición Kafkaa partir de los bytes

Compruebe una clave y el total de particiones con el algoritmo Murmur2 compatible con Java.

Calcular partición Kafka

Clave serializada

Se conservan espacios y saltos de línea. Una clave de cero bytes es válida; elija null para una clave ausente.

Resultado

Partición (desde 0)
9
Cantidad de bytes
5
Hash de 32 bits con signo
2132663229
Hash de 32 bits sin signo
2132663229
Hash sin bit de signo
2132663229

Pasos del cálculo

  1. Decodificar la clave en 5 bytes.
  2. Murmur2 con semilla 0x9747b28c → 2132663229.
  3. 2132663229 & 0x7fffffff → 2132663229.
  4. 2132663229 % 12 → partición 9.

Bytes de la clave en hexadecimal

68 65 6c 6c 6f

El cálculo se realiza en esta pestaña. No se envían ni guardan claves ni se conecta con un clúster Kafka.

Opciones

Se aplica al enrutamiento con clave mediante Murmur2 compatible con Java. Una partición explícita, claves ignoradas u otro serializador o particionador pueden cambiar el destino real.

Cálculo completado.

Calcular partición Kafka ayuda a investigar un mensaje que llega a un destino inesperado. Primero conviene separar la clave visible de los bytes que realmente produjo la serialización. Aquí puede comparar esos bytes, el hash y el divisor antes de atribuir el problema al productor.

Una clave de partición numérica puede viajar como texto o como entero binario. No son entradas equivalentes para el hash. Si utiliza un serializador distinto del de cadenas UTF-8, introduzca su salida real en hexadecimal o Base64.

Por qué elegir Calcular partición Kafka

Comprobar lo que se está hasheando

Calcular partición Kafka permite cotejar tres representaciones de la misma secuencia. La vista hexadecimal revela espacios finales, saltos de línea y caracteres de varios bytes. Cuando los bytes coinciden, la codificación usada para introducirlos no cambia el hash ni el destino con las mismas condiciones.

Tres canales de entrada convergen en los mismos bloques de bytes y un único resultado.

Distinguir vacío de ausente

Una cadena UTF-8 vacía produce un array existente de cero bytes. null significa que no hay array de clave. El primero tiene un hash determinista; el segundo requiere el estado del productor. Por eso no se presenta una partición inventada para la ausencia de clave.

Una clave de bytes sigue una ruta fija; una clave ausente apunta con líneas discontinuas a varios destinos posibles.

Reproducir las condiciones del productor

01

Partir de la serialización real

UTF-8 conserva espacios y saltos. Hex admite blancos ASCII, pero necesita pares completos sin 0x. Base64 estándar requiere su relleno. Cambiar la codificación vuelve a interpretar la entrada; no convierte ni sustituye automáticamente el texto.

02

Usar el total actual del tema

12 es un ejemplo inicial, no una recomendación de capacidad. La numeración empieza en cero: con 12 particiones hay destinos del 0 al 11. Al cambiar el total puede cambiar el resto y el destino de futuras escrituras, aunque el hash permanezca igual.

03

Contrastar una referencia conocida

Cargue abc o foobar desde los vectores y compare el hash con signo con el valor esperado. El modo automático espera 350 ms tras el último cambio. Desactívelo para ejecutar con Ctrl/Cmd + Intro; los resultados antiguos no se pueden exportar.

Seguir el cálculo valor por valor

La variante fija de Kafka

Murmur2 usa la semilla 0x9747b28c, bloques de cuatro bytes little endian y multiplicación de 32 bits. Los valores con y sin signo representan los mismos bits. Antes del módulo se elimina el bit de signo con 0x7fffffff; tomar el valor absoluto es una operación distinta.

Decodificación estricta de bytes

Hex y Base64 estándar aceptan bytes arbitrarios, incluidos 00 y ff. Una cantidad impar de dígitos, relleno incorrecto o bits finales no canónicos producen un error. La herramienta tampoco cambia mayúsculas ni normaliza Unicode, evitando reparaciones silenciosas que modificarían el hash.

Vectores fijos e informe completo

abc, foobar y 21 muestran los valores de referencia de Apache Kafka. La vista previa empieza con 100 bytes y se amplía de 100 en 100. El JSON conserva todos los bytes, algoritmo, codificación, tipo de clave, total de particiones y valores intermedios para compararlos con registros.

Alcance y límites de la fórmula

No representa todos los clientes
Solo está implementado Murmur2 compatible con Java. El valor predeterminado de librdkafka puede basarse en CRC32. Un particionador personalizado, partitioner.ignore.keys o una partición explícita pueden omitir esta fórmula. No se ofrecen CRC32, Murmur3, FNV ni semillas personalizadas.
No predice un destino fijo para null
Al elegir null se conserva el texto, pero no se utiliza. Las estrategias sticky o aleatorias necesitan información de ejecución. Escribir literalmente null en el modo de bytes sigue siendo una clave UTF-8 de cuatro bytes. Revise también cómo trata su cliente las claves de longitud cero.
No ejecuta serializadores de negocio
No se ejecutan Avro, Protobuf, serializadores de enteros ni consultas al schema registry. Los espacios se conservan y Unicode no se normaliza. Los sustitutos aislados se rechazan para evitar reemplazos del navegador; si su serializador actúa de otra forma, proporcione sus bytes.
El presupuesto pertenece al navegador
Se permiten 196608 unidades de código UTF-16 y 65536 bytes decodificados. El total de particiones debe ser un entero decimal entre 1 y 2147483647. No hay importación de archivos, URL o lotes. Estas cifras no son los límites de mensajes del broker Kafka.
No calcula capacidad ni mueve datos
Una sola clave no determina el número recomendado de particiones, broker, consumidor u offset. Aumentar el total puede cambiar futuras escrituras sin mover mensajes antiguos. No se simulan distribuciones ni migraciones y tampoco se garantiza el orden entre particiones.

Calcular partición Kafka: preguntas frecuentes

¿Cómo se determina la partición de destino de una clave?

Con la política seleccionada, calcule Murmur2 sobre los bytes serializados, elimine el bit de signo y obtenga el resto respecto al total de particiones. abc tiene hash con signo 479470107 y cae en la partición 3 de 12. Confirme el total con los metadatos del tema.

¿Pueden distintas claves acabar en la misma partición?

Sí. Muchas claves comparten un conjunto finito de destinos. No hace falta que sus hashes completos coincidan: valores positivos distintos pueden tener el mismo resto. Compartir partición no demuestra igualdad de claves ni necesariamente una colisión del hash de 32 bits.

¿Por qué la misma clave llega a particiones diferentes?

Compare los bytes, el total y la configuración del particionador. Distintos clientes pueden elegir algoritmos y serializadores diferentes. Una partición explícita o ignorar las claves también cambia la ruta. El rebalanceo de consumidores modifica la asignación de consumo, pero no esta fórmula de hash.

¿Es obligatorio enviar una clave con cada mensaje Kafka?

No. Depende de los requisitos de agrupación y orden de la aplicación. Se pueden enviar mensajes sin clave, aunque su destino ya no se obtiene únicamente con la fórmula Murmur2 por clave. Una cadena vacía es diferente de una clave que no existe.

¿Cómo se elige la partición cuando no hay clave?

Depende del cliente, la versión, la configuración y el estado de ejecución, incluidos los lotes. Los productores Java pueden emplear comportamiento sticky y otros clientes siguen políticas distintas. Esta página no asigna una partición fija a null ni supone siempre una rotación circular.

¿Cambia la semilla de Murmur2 entre ejecuciones?

La variante de Kafka usa la semilla fija 0x9747b28c. Los mismos bytes producen el mismo hash entre ejecuciones. Eso no fija para siempre el destino: otro total de particiones cambia el módulo y otro particionador puede aplicar un algoritmo distinto.

¿Has detectado un error de cálculo o validación?

Revisar otra clave del productor

Calcular partición Kafka permite contrastar los bytes reales del serializador y sus valores intermedios con la implementación de enrutamiento del productor.