En Java, puedes suscribir un consumidor de Kafka a todos los tópicos cuyos nombres coincidan con una expresión regular usando subscribe(Pattern). Por ejemplo, consumer.subscribe(Pattern.compile("^orders\..*")) coincide con nombres que comienzan por orders.. La suscripción es dinámica, pero Kafka descubre cambios periódicamente: un tópico nuevo no se incorpora necesariamente de inmediato.
Suscripción por patrón en Java
La API de KafkaConsumer de Apache Kafka 4.1.2 describe subscribe(Pattern) como una forma de suscribirse a todos los tópicos que coincidan con un patrón y recibir particiones asignadas dinámicamente. Este ejemplo selecciona los tópicos cuyos nombres empiezan por orders.:
As an Amazon Associate I earn from qualifying purchases.
import java.time.Duration;
import java.util.regex.Pattern;
import org.apache.kafka.clients.consumer.KafkaConsumer;
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Pattern.compile("^orders\..*"));
while (running) {
var records = consumer.poll(Duration.ofMillis(100));
// Procesa records y gestiona commits según las necesidades de la aplicación.
}
En la expresión, ^ ancla la coincidencia al inicio del nombre, orders es el prefijo literal, . representa un punto literal y .* acepta cualquier secuencia posterior. La doble barra invertida de la cadena Java escapa la barra que necesita la expresión regular.
Recommended Free Tools
props debe contener la configuración de conexión y grupo correspondiente, incluido un group.id apropiado. El fragmento se centra en la suscripción: no incluye cierre del consumidor, manejo de errores ni una política de commits. No es una prueba de ejecución en un clúster.
#1 Best Overall
Qué pasa cuando aparecen tópicos coincidentes
Con subscribe(Pattern), no hace falta enumerar de antemano todos los nombres: Kafka compara periódicamente la expresión con los tópicos existentes. La frecuencia de actualización de metadatos, en la que influye metadata.max.age.ms, afecta a cuándo se reconocen cambios. Por eso, un tópico que acaba de crearse puede tardar en entrar en la suscripción.
Cuando cambian los tópicos coincidentes, las particiones o los miembros del grupo, puede producirse un rebalanceo. Kafka coordina la asignación de particiones entre los consumidores que comparten el mismo group.id; cada partición de un tópico se asigna a un miembro del grupo. La documentación de KafkaConsumer 4.1.2 indica que los rebalances se llevan a cabo durante una llamada activa a poll(Duration). Mantén el ciclo de sondeo activo para que el consumidor participe en la coordinación y reciba registros.
Elige la API según cómo cambien los tópicos
| Necesidad | API | Qué tener en cuenta |
|---|---|---|
| La lista de tópicos es conocida y cerrada | subscribe(Collection<String>) |
La llamada establece la suscripción explícita y reemplaza la anterior; no añade nombres a una suscripción existente. |
| Los nombres pueden aparecer con el tiempo y siguen un patrón | subscribe(Pattern) |
Kafka comprueba periódicamente los nombres de los tópicos; los cambios en las coincidencias pueden iniciar un rebalanceo. |
| Usas el protocolo de consumidor nuevo de Kafka 4.x y necesitas un patrón | subscribe(SubscriptionPattern) |
Requiere group.protocol=consumer y patrones compatibles con Google RE2/J; la expresión se evalúa en el servidor. |
| Quieres asignar particiones manualmente | assign(Collection<TopicPartition>) |
La asignación manual omite la gestión del grupo y no se combina con la suscripción dinámica. |
Kafka 4.x: distingue las dos APIs de patrón
Kafka 4.0 introdujo SubscriptionPattern para el protocolo de consumidor nuevo. La documentación del protocolo de rebalanceo de consumidor de Kafka 4.3 especifica que esta vía requiere group.protocol=consumer, usa sintaxis compatible con RE2/J y evalúa el patrón en el servidor. No traslades esas restricciones automáticamente a la API clásica subscribe(Pattern): Kafka documenta esa sobrecarga por separado en su API de consumidor 4.1.2.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rebalances, offsets y asignación manual
Si la aplicación administra offsets o estado asociado a particiones, puedes usar la sobrecarga subscribe(Pattern, ConsumerRebalanceListener) para recibir callbacks durante los rebalances. Kafka recomienda un listener cuando el código gestiona offsets por su cuenta, de modo que pueda confirmar los offsets pendientes antes de que termine un rebalanceo. El momento y las acciones de esos callbacks forman parte de la estrategia de consumo de la aplicación.
Rank #3
No mezcles subscribe(...) con assign(...) como si fueran formas acumulables de añadir particiones. assign(Collection<TopicPartition>) reemplaza la asignación actual y deja la coordinación del grupo fuera de esa asignación manual. Para cambiar de modalidad, sigue las reglas de la API y cancela la suscripción cuando corresponda.
Quick Recap
Best Value
Rank #4
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

