Todos los productos
Search
Centro de documentos

ApsaraMQ for Kafka:Client parameter configuration

Última actualización: Sep 04, 2026

Este tema describe cómo configurar los parámetros del cliente para ApsaraMQ for Kafka. Una configuración adecuada de los parámetros afecta directamente el rendimiento de mensajes, la confiabilidad de la entrega y la estabilidad del consumidor. Las siguientes secciones cubren los parámetros del productor y del consumidor con valores recomendados y orientación de ajuste para cargas de trabajo en producción.

Parámetros del productor

Entrega de mensajes

acks

Controla cuántas confirmaciones del broker requiere el productor antes de considerar exitoso un envío.

Valor

Comportamiento

Compromiso

0

Sin confirmación del broker.

Mayor rendimiento, mayor riesgo de pérdida de datos.

1

Confirmación después de que el líder escribe los datos.

Rendimiento y durabilidad equilibrados. Es posible la pérdida de datos si el líder falla antes de que los seguidores repliquen los datos.

all

Confirmación después de que el líder y todas las réplicas sincronizadas escriben los datos.

Menor rendimiento, mayor durabilidad. La pérdida de datos ocurre solo si el líder y todas las réplicas sincronizadas fallan simultáneamente.

Valor recomendado: 1 para la mayoría de las cargas de trabajo que priorizan el rendimiento sobre la durabilidad estricta.

retries

Número máximo de veces que el productor reintenta un envío con errores. Un valor más alto ayuda al productor a recuperarse de fallos transitorios del broker, como elecciones de líder. Combínelo con retry.backoff.ms para controlar el ritmo de los reintentos.

retry.backoff.ms

Retraso entre reintentos de envío. Un valor demasiado bajo puede causar tormentas de reintentos durante las conmutaciones por error del broker.

Recomendado

Predeterminado

Unidad

1000

--

milisegundos

Procesamiento por lotes y rendimiento

El procesamiento por lotes amortiza la sobrecarga de red al combinar varios registros en una sola solicitud. Dos parámetros controlan cuándo se envía un lote: tamaño y tiempo.

batch.size

Tamaño máximo de un solo lote por partición. Cuando un lote alcanza este tamaño, el productor lo envía inmediatamente.

Tipo

Predeterminado

Valores válidos

Unidad

int

16384

[0,...]

bytes

Mantenga el valor predeterminado de 16384 para la mayoría de las cargas de trabajo. Un valor menor aumenta el número de solicitudes de red y reduce el rendimiento. Si incrementa batch.size, asegúrese de que buffer.memory sea lo suficientemente grande para alojar los lotes más grandes.

linger.ms

Tiempo máximo que el productor espera a que se llene un lote antes de enviarlo. Esto funciona como el algoritmo de Nagle en TCP: una vez que un lote alcanza batch.size, se envía inmediatamente sin importar el temporizador de espera. Si el lote aún está por debajo de batch.size cuando transcurre linger.ms, el productor envía lo que se haya acumulado.

Recomendado

Predeterminado

Unidad

100 a 1000

0

milisegundos

Un valor mayor de linger.ms aumenta la eficiencia del procesamiento por lotes y el rendimiento a costa de la latencia por mensaje.

Gestión de memoria

buffer.memory

Memoria total que el productor asigna para almacenar en búfer los registros no enviados en todas las particiones. Si este pool se agota, send() se bloquea o lanza una excepción dependiendo de max.block.ms. Un búfer insuficiente provoca una asignación de memoria lenta, reducción del rendimiento o tiempos de espera de envío agotados.

Unidad: bytes. Predeterminado: 33554432 (32 MB).

Fórmula de dimensionamiento:

buffer.memory >= batch.size x number_of_partitions x 2

Por ejemplo, con batch.size=16384 y 50 particiones:

16384 x 50 x 2 = 1,638,400 bytes (~1.6 MB minimum)

Si incrementa batch.size para mejorar el rendimiento, escale buffer.memory proporcionalmente.

Particionamiento

partitioner.class

Determina cómo asigna el productor los registros a las particiones. La estrategia de particionamiento adhesivo reduce el número de lotes incompletos al llenar el lote de una partición antes de pasar a la siguiente.

Versión del cliente Kafka

Estrategia predeterminada

2.4 y posteriores

Particionamiento adhesivo (predeterminado)

Anterior a 2.4

Round-robin

Si su cliente productor es anterior a la versión 2.4, establezca explícitamente el particionador adhesivo para mejorar la eficiencia del procesamiento por lotes.

Parámetros del consumidor

Ajuste de obtención de datos

Estos parámetros controlan cuántos datos recupera el consumidor por solicitud de obtención. Su ajuste afecta tanto al rendimiento como a la latencia.

fetch.min.bytes

Cantidad mínima de datos que acumula el broker antes de devolver una respuesta de obtención. Un valor mayor reduce la frecuencia de obtención y la sobrecarga de CPU del broker, lo que mejora el rendimiento pero aumenta la latencia de mensajes de extremo a extremo. Unidad: bytes.

Evalúe la tasa de mensajes de su productor antes de establecer este valor. Si los mensajes llegan lentamente, un valor grande de fetch.min.bytes añade un retraso innecesario.

fetch.max.wait.ms

Tiempo máximo que espera el broker para acumular fetch.min.bytes antes de devolver una respuesta. Unidad: milisegundos.

El comportamiento varía según el tipo de almacenamiento:

  • Almacenamiento local: El broker espera hasta que se alcance fetch.min.bytes o transcurra fetch.max.wait.ms, lo que ocurra primero.

  • Almacenamiento en la nube: El broker devuelve una respuesta inmediatamente cuando llegan nuevos datos, sin importar fetch.min.bytes.

max.partition.fetch.bytes

Cantidad máxima de datos que devuelve el broker por partición en una sola obtención. Unidad: bytes.

Gestión de sesiones y reequilibrio

Los parámetros de sesión y sondeo mal configurados son la causa más común de reequilibrios inesperados del consumidor. Un reequilibrio pausa todo el consumo en el grupo hasta que se reasignan las particiones, así que evite desencadenar reequilibrios innecesarios.

session.timeout.ms

Tiempo máximo entre latidos antes de que el broker considere muerto al consumidor y desencadene un reequilibrio.

Recomendado

Rango válido

Predeterminado

Unidad

30000 a 60000

6000 a 300000

10000

milisegundos

Nota

En el cliente Java 0.10.1 y posteriores, un hilo dedicado en segundo plano envía latidos independientemente de

poll()

. En versiones anteriores de Java o clientes que no son de Java, los latidos se envían durante las llamadas a

poll()

, por lo que

session.timeout.ms

debe tener en cuenta tanto el tiempo de procesamiento de datos como el intervalo de latidos.

Nota

Consejo:

Establezca

heartbeat.interval.ms

en no más de un tercio de

session.timeout.ms

. Por ejemplo, si

session.timeout.ms

es 45000, establezca

heartbeat.interval.ms

en 15000 o menos.

max.poll.records

Número máximo de registros devueltos en una sola llamada a poll(). Si el consumidor no puede procesar tantos registros antes de la siguiente fecha límite de poll(), el broker lo considera muerto y desencadena un reequilibrio.

Fórmula de dimensionamiento:

max.poll.records < messages_per_thread_per_second x consumer_threads x session_timeout_seconds

Por ejemplo, con 500 msg/s por hilo, 4 hilos y un tiempo de espera de sesión de 45 segundos:

500 x 4 x 45 = 90,000

Establezca max.poll.records por debajo de este valor para asegurar que el consumidor siempre termine el procesamiento antes de que expire la sesión.

max.poll.interval.ms

Intervalo máximo entre llamadas consecutivas a poll() antes de que el broker elimine al consumidor del grupo. Este parámetro se aplica solo al cliente Java 0.10.1 y posteriores, donde los latidos se ejecutan en un hilo separado.

Predeterminado

Unidad

300000

milisegundos

Fórmula de dimensionamiento:

max.poll.interval.ms > time_per_record x max.poll.records

En la mayoría de los casos, el valor predeterminado de 300000 (5 minutos) es suficiente. Auméntelo solo si su lógica de procesamiento es excepcionalmente lenta.

Gestión de desplazamientos

enable.auto.commit

Controla si el consumidor confirma automáticamente los desplazamientos en un intervalo fijo.

Valor

Comportamiento

true (predeterminado)

Los desplazamientos se confirman automáticamente cada auto.commit.interval.ms milisegundos. Es más sencillo de gestionar, pero puede causar procesamiento duplicado tras un fallo.

false

Su aplicación debe llamar explícitamente a commitSync() o commitAsync(). Utilice esta opción para semánticas de al menos una vez o exactamente una vez cuando se combina con procesamiento idempotente.

auto.commit.interval.ms

Intervalo para confirmaciones automáticas de desplazamientos cuando enable.auto.commit es true.

Predeterminado

Unidad

1000

milisegundos

Un intervalo más corto reduce la ventana para mensajes duplicados tras un fallo, pero aumenta el número de solicitudes de confirmación al broker.

auto.offset.reset

Determina qué sucede cuando el consumidor no tiene un desplazamiento confirmado o el desplazamiento confirmado no es válido (por ejemplo, el desplazamiento se eliminó debido a políticas de retención).

Valor

Comportamiento

latest

Comienza a consumir desde el desplazamiento más reciente. Solo mensajes nuevos.

earliest

Comienza a consumir desde el desplazamiento disponible más antiguo. Reprocesa todos los mensajes retenidos.

none

Lanza una excepción. Utilice esta opción cuando su aplicación gestiona los desplazamientos manualmente.

Valor recomendado: latest. El uso de earliest hace que el consumidor reprocese todos los mensajes retenidos cada vez que encuentra un desplazamiento no válido, lo que puede provocar procesamiento duplicado y un pico en el retraso del consumidor.

Si su aplicación maneja la gestión de desplazamientos manualmente (por ejemplo, almacenando desplazamientos en una base de datos externa), establezca esto en none.

Referencia rápida de parámetros

Parámetros del productor

Parámetro

Predeterminado

Recomendado

Unidad

acks

--

1 (rendimiento) o all (durabilidad)

--

retries

--

Establecer según requisitos de disponibilidad

--

retry.backoff.ms

100

1000

ms

batch.size

16384

16384 (predeterminado)

bytes

linger.ms

0

100 a 1000

ms

buffer.memory

33554432

>= batch.size x particiones x 2

bytes

partitioner.class

Sticky (2.4+)

Particionamiento adhesivo

--

Parámetros del consumidor

Parámetro

Predeterminado

Recomendado

Unidad

fetch.min.bytes

1

Ajustar según la tasa de mensajes del productor

bytes

fetch.max.wait.ms

500

--

ms

max.partition.fetch.bytes

1048576

--

bytes

session.timeout.ms

10000

30000 a 60000

ms

heartbeat.interval.ms

3000

<= 1/3 de session.timeout.ms

ms

max.poll.records

500

Consulte la fórmula de dimensionamiento

--

max.poll.interval.ms

300000

300000 (predeterminado)

ms

enable.auto.commit

true

Depende de la semántica de entrega

--

auto.commit.interval.ms

1000

1000 (predeterminado)

ms

auto.offset.reset

latest

latest

--