es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Kafka suscribiéndose a un tema de manera no determinista.

Mi problema es que tengo un marco de trabajo “dinámico” para Kafka y la creación de nuevos consumidores de Kafka ocurre sobre la marcha cuando el usuario solicita un nuevo tema.

El problema es que sé que he terminado cuando el consumidor no devuelve un nuevo valor en X segundos.

Ahora el problema es que cuando creo mi nuevo consumidor, ocurren muchas cosas en segundo plano, como el registro de metadatos, etc. Por lo tanto, el valor X en mi fórmula necesita ser muy alto, de lo contrario, dejo de procesar, pero el consumidor nunca comienza a recibir valores.

¿Hay alguna forma buena de resolver este problema?

Sé que existe .poll(0); que espera la creación de metadatos, pero está obsoleto.

PD: Recupero los datos del consumidor mediante .poll(Duration.of(0)), ya que no quiero bloquear la espera y solo estoy interesado en los datos más nuevos. Llamaré a .poll en un bucle por mí mismo con un intervalo lo suficientemente grande.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución a este problema es utilizar la API de Administración de Kafka para precrear los temas que el usuario pueda solicitar. Esto asegurará que el registro de metadatos y otros procesos ocurran antes de que el usuario solicite el tema. De esta manera, puedes mantener el valor X en tu fórmula relativamente bajo sin arriesgarte a detener el procesamiento antes de que el consumidor comience a recibir valores.

    Otra solución es utilizar la API de Grupo de Consumidores de Kafka para crear grupos de consumidores para cada tema solicitado por el usuario. De esta manera, Kafka se encargará de los procesos detrás de escena por ti, y puedes establecer el valor de X en tu fórmula relativamente bajo.

    Si todavía quieres utilizar el método .poll, puedes utilizar el método sobrecargado .poll(Duration timeout), que te permite establecer un tiempo de espera para recibir nuevos datos. De esta manera, puedes establecer un valor de tiempo de espera bajo para los temas que ya han sido solicitados por el usuario, mientras que estableces un valor de tiempo de espera más alto para los consumidores recién creados.

    Por último, también puedes explorar el uso de un enfoque de programación reactiva, como el uso de Spring Reactor o RxJava, para crear consumidores que puedan manejar flujos de datos asíncronos y manejar automáticamente los procesos detrás de escena. Esto puede hacer que tu código sea más eficiente y escalable.

Comments are closed.