Podczas pracy z Apache Kafka może zdarzyć się sytuacja, gdy będziemy potrzebowali usunać dane z topic’u, bo np. podczas testów zostały wysłane śmieciowe dane, a nie mieliśmy jeszcze zaimplementowanej obsługi takich błędów, w wyniku czego powstał nam tzw. “poison pill” – czyli taki rekord/rekordy, które za każdym razem, gdy próbujemy odczytać z Kafki powodują, że nasze przetważanie ulega awarii.
1 sposób (niezalecany)
Możemy po prostu usunąc topic i stworzyć go na nowo. Osobiście uważam, że lepiej jest stosować sposób drugi czyli:
2 sposób: zmiana retencji
Drugim sposobem jest zmiana retencji danych na topic’u do jakieś małej wartości np. 1 sekundy. Dane zostaną automatycznie usunięte przez wewnętrzene procesy Kafki. O nic nie musimy się wtedy martwić.
Najpierw sprawdźmy aktualną konfigurację topic’u: retention.ms=86400000 (7 dni)
kafka-topics --zookeeper kafka:2181 --topic bigdata-etl-file-source -describe
Topic:bigdata-etl-file-source PartitionCount:1 ReplicationFactor:1 Configs:retention.ms=86400000 Topic: bigdata-etl-file-source Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Zmieniamy retencje na 1 sekundę
kafka-configs --zookeeper <zookeeper>:2181 --entity-type topics --alter --entity-name bigdata-etl-file-source --add-config retention.ms=1000
Sprawdzamy konfigurację:
kafka-configs --zookeeper <zookeeper>:2181 --entity-type topics --alter --entity-name bigdata-etl-file-source --add-config retention.ms=1000 kafka-configs --zookeeper kafka:2181 --entity-type topics --alter --entity-name bigdata-etl-file-source --add-config retention.ms=1000
Pamiętaj, aby chwilę odczekać (około 1 min), aby dane zostały usunięte.
Gdy sprawdzimy, że dane zostały już usunięte z topic’u, możemy przywrócić poprzednie ustawienia.