poll partitions kafka interval example auto_offset_reset apache-kafka kafka-consumer-api

apache kafka - partitions - ID de grupo por defecto de Kafka Consumer



max poll interval ms (3)

Si no configura group.id, obtendrá un error cuando consuma datos de tema.

org.apache.kafka.common.errors.InvalidGroupIdException: The configured groupId is invalid 22:08:14.132 [testAuto-kafka-consumer-1] INFO org.apache.kafka.clients.consumer.internals.AbstractCoordinator - (Re-)joining group 22:08:14.132 [testAuto-kafka-consumer-1] DEBUG org.apache.kafka.clients.consumer.internals.AbstractCoordinator - Sending JoinGroup ({group_id=,session_timeout=15000,rebalance_timeout=300000,member_id=,protocol_type=consumer,group_protocols=[{protocol_name=range,protocol_metadata=java.nio.HeapByteBuffer[pos=0 lim=18 cap=18]}]}) to coordinator bogon:9092 (id: 2147483647 rack: null) 22:08:14.132 [testAuto-kafka-consumer-1] ERROR org.apache.kafka.clients.consumer.internals.AbstractCoordinator - Attempt to join group failed due to fatal error: The configured groupId is invalid 22:08:14.132 [testAuto-kafka-consumer-1] ERROR org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer - Container exception

Estoy trabajando con Apache Kafka y su cliente Java y veo que los mensajes están equilibrados en la carga a través de diferentes Consumidores Kafka que pertenecen al mismo grupo (es decir, comparten la misma ID de grupo).

En mi aplicación necesito que todos los consumidores lean todos los mensajes.

Así que tengo varias preguntas:

  • Si no configuro ningún ID de grupo en las Propiedades del consumidor, ¿qué ID de grupo recibirá el consumidor de Kafka?

  • ¿Hay un único valor predeterminado?

  • ¿El cliente crea un valor aleatorio cada vez?

  • ¿Necesito crear una identificación diferente para cada consumidor para estar seguro de que cada uno reciba todos los mensajes?

EDIT: Gracias por sus respuestas.

Usted tiene razón: si uno no establece la ID del grupo de consumidores, Kafka debería quejarse.

Sin embargo, he descubierto que si el ID de grupo es nulo, el cliente Java lo establece en la cadena vacía "" para evitar problemas. Así que aparentemente ese es el valor por defecto que estaba buscando.

Sorprende a todos mis consumidores, incluso si no configuro sus GroupId (y, por lo tanto, todos están con groupId == "") parecen recibir todos los mensajes que escribe el productor.

Todavía no puedo explicar esto: ¿alguna sugerencia?


Yo tengo el mismo problema. Y tomó un tiempo para investigar este problema. El proyecto spring-cloud-stream comprobará si ha configurado la ID de grupo para el consumidor. Si no, spring-cloud-stream creará un valor aleatorio como identificación de grupo. Consulte el método createConsumerEndpoint en la clase KafkaMessageChannelBinder.


Si no configuro ningún ID de grupo en las Propiedades del consumidor, ¿qué ID de grupo recibirá el consumidor de Kafka?

El consumidor kafka no tendrá ningún grupo de consumidores. En su lugar obtendrá este error: The configured groupId is invalid

¿Hay un único valor predeterminado?

Sí, puede ver el archivo consumer.properties de kafka como referencia. El ID de grupo de consumidores predeterminado es: group.id=test-consumer-group

¿El cliente crea un valor aleatorio cada vez?

No, groupId parece ser obligatorio para el cliente Java que inicia los consumidores Kafka 0.9.0.x. Puede consultar este JIRA: https://issues.apache.org/jira/browse/KAFKA-2648

¿Necesito crear una identificación diferente para cada consumidor para estar seguro de que cada uno reciba todos los mensajes?

Sí, si todos los consumidores usan la misma identificación de grupo, los mensajes en un tema se distribuyen entre esos consumidores. En otras palabras, cada consumidor obtendrá un subconjunto no superpuesto de los mensajes. Tener más consumidores en el mismo grupo aumenta el grado de paralelismo y el rendimiento general del consumo. Por otro lado, si cada consumidor está en su propio grupo, cada consumidor recibirá una copia completa de todos los mensajes.