Notas del productor de Kafka

Punto de bloqueo del productor de Kafka:

max.block.ms : tiempo máximo de espera para todo el método kafka.send, aunque kafka.send es asíncrono, hay varias operaciones sincrónicas / de bloqueo dentro del método: max.block.ms incluye: Tiempo de
recuperación de metadatos: el método de envío puede que necesite recuperar los metadatos de la partición del tema para poder enviar correctamente los registros por lotes. metadata.max.age.ms controla cuánto tiempo se almacenarán en caché los metadatos dentro del cliente

Tiempo de asignación de búfer: el método de adición de RecordAccumulator necesita esperar suficiente espacio en el grupo de búfer compartido y adquirir memorias. Los recuerdos adquiridos se volverán a poner en común en las siguientes situaciones:

El lote se cancela en condiciones anormales:
Sender.maybeAbortBatches -> RecordAccumulator.abortBatches (si el administrador de transacciones contiene un error)
Sender.run -> RecordAccumulator.abortIncompleteBatches (si se fuerza el cierre del remitente)

Después de que el remitente del mensaje recibe la respuesta de producto del intermediario
Sender.completeBatch o Sender.failBatch Motivos del
lote de error: consulte (org.apache.kafka.clients.producer.internals.Sender) 1.Id del productor
cambiado
2.Excepción detectada en la respuesta de envío (tiempo de reintento agotado o la excepción no es recuperable)
3. Lote caducado. (el lote existe en el búfer durante más de request.timeout.ms)

Componentes del productor Kafka:

RecordAccumulator: agrupa los registros del productor en lote por partición de tema. Se creará un nuevo lote si el último lote existente está lleno. (Supera el tamaño del lote )

Remitente: drene los registros por lotes de recordAccumulator, agrúpelos por Id de nodo (los registros dirigidos al mismo host pueden colocarse en un solo mensaje). Asegúrese de que el tamaño total de los registros de lote drenados nunca exceda el tamaño máximo de solicitud . Convierta lotes de productores en clientRequest y envíelos a través de NetworkClient. Después de completar el envío de la solicitud, el remitente sondeará la respuesta. Se introduce un breve retraso ( linger.ms ) si no hay datos disponibles inmediatamente antes de la siguiente ejecución

NetworkClient: envíe clientRequest a través de tcp. El networkClient no solo envía registros de productores, sino también otros mensajes de administrador como el mensaje de actualización de metadatos, etc.

Garantía de pedido de mensaje:

NetworkClient contiene InFlightRequests. InFlightRequests contiene la solicitud enviada pero aún no ha recibido respuesta. Configuración: max.in.flight.requests.per.connection controla el número máximo de inFlightRequest. Los valores más altos mejorarán el rendimiento, a costa de un posible fallo en la reenvío (donde se reconoce la solicitud posterior pero la solicitud anterior falló y es necesario volver a entregar). Una vez que se alcanza este umbral, networkClient no podrá enviar más solicitudes lanzando IllegalStateException (NetworkClient.doSend).
El orden del mensaje está garantizado si max.in.flight.requests.per.connection es 1.
Silenciar partición: si una determinada partición de tema tiene algún lote de registros en curso, esa partición se silencia, lo que significa que la siguiente operación de drenaje de recordAccumulator excluirá esa partición. La partición no se silenciará una vez que se complete el lote
A partir de la versión 1.1, KafkaProducer tiene un nuevo parámetro de configuración enable.idempotence para garantizar el orden de los mensajes, por lo que el máximo de solicitudes de vuelo por conexión puede ser mayor que 1 pero no puede exceder 5.

Métricas y resolución de problemas:

Sender.handleProduceResponse invoca sensores.recordLatency, que registra la latencia entre solicitud / respuesta. Esto puede resultar útil para solucionar problemas relacionados con el remitente.

Supongo que te gusta

Origin blog.51cto.com/shadowisper/2542817
Recomendado
Clasificación