Solución:
En Kafka, la responsabilidad de lo que se ha consumido es responsabilidad del consumidor y esta es también una de las principales razones por las que Kafka tiene una escalabilidad horizontal tan grande.
El uso de la API de consumidor de alto nivel hará esto automáticamente al confirmar las compensaciones consumidas en Zookeeper (o una opción de configuración más reciente está usando un tema especial de Kafka para realizar un seguimiento de los mensajes consumidos).
La API de consumidor simple le permite lidiar con cómo y dónde realizar un seguimiento de los mensajes consumidos.
La depuración de mensajes en Kafka se realiza automáticamente ya sea especificando un tiempo de retención para un tema o definiendo una cuota de disco para él, por lo que para su caso de un archivo de 5GB, este archivo se eliminará después de que haya pasado el período de retención que defina, independientemente de si se ha consumido o no.
Según mi conocimiento, puedes Borrar los datos consumidos forman los registros al reducir el tiempo de almacenamiento. El tiempo predeterminado para el registro está configurado para 168 horas y luego los datos se eliminan automáticamente de la Tema Kafka que creaste. Por lo tanto, mi sugerencia es reducir el paso al server.properties
que se encuentra en la carpeta de configuración y el cambio de 168 a un tiempo mínimo. por lo que no hay datos después de la cantidad de tiempo específica que ha establecido para el log.retention.hours.Así que tu problema estará resuelto.
log.retention.hours = 168
Sigue codificando
No se puede borrar un mensaje de Kafka sobre consumo
Kafka no tiene un mecanismo para eliminar directamente un mensaje cuando se consume.
Lo más parecido que encontré en un intento de hacer esto es este truco, pero no está probado y, por diseño, no funcionará en los mensajes más recientes:
Un truco potencial para hacer esto es usar una combinación de (a) un tema compactado y (b) un particionador personalizado (c) un par de interceptores.
El proceso seguiría:
- Utilice un interceptor de productor para agregar un GUID al final de la clave antes de que se escriba.
- Utilice un particionador personalizado para ignorar el GUID con el fin de particionar
- Use un tema compactado para que luego pueda eliminar cualquier mensaje individual que necesite a través de producer.send (clave + GUID, nulo)
- Utilice un interceptor de consumidor para eliminar el GUID en lectura.
Pero no debería necesitar esta capacidad.
¿Tiene 1 o más consumidores y desea que un mensaje sea consumido solo una vez en total por ellos?
Colóquelos en el mismo grupo de consumidores.
¿Quiere evitar que demasiados mensajes llenen el disco?
Configure la retención en términos de espacio en disco o tiempo.