Ne pensez pas qu'il est encore pris en charge. Jetez un œil à ce problème JIRA "Ajout de la prise en charge de la suppression de sujets".
Pour supprimer manuellement:
- Arrêter le cluster
- Nettoyer le répertoire du journal kafka (spécifié par l'
log.dir
attribut dans le fichier de configuration kafka ) ainsi que les données du gardien de zoo
- Redémarrez le cluster
Pour un sujet donné, ce que vous pouvez faire est
- Arrêtez kafka
- Nettoyer le journal kafka spécifique à la partition, kafka stocke son fichier journal dans un format de «logDir / topic-partition» donc pour une rubrique nommée «MyTopic», le journal de la partition id 0 sera stocké
/tmp/kafka-logs/MyTopic-0
là où /tmp/kafka-logs
est spécifié par l' log.dir
attribut
- Redémarrez kafka
C'est NOT
une bonne approche recommandée, mais elle devrait fonctionner. Dans le fichier de configuration du courtier Kafka, l' log.retention.hours.per.topic
attribut est utilisé pour définirThe number of hours to keep a log file before deleting it for some specific topic
En outre, existe-t-il un moyen de supprimer les messages dès que le consommateur les lit?
À partir de la documentation Kafka :
Le cluster Kafka conserve tous les messages publiés, qu'ils aient été consommés ou non, pendant une période configurable. Par exemple, si la rétention du journal est définie sur deux jours, pendant les deux jours suivant la publication d'un message, il est disponible à la consommation, après quoi il sera supprimé pour libérer de l'espace. Les performances de Kafka sont effectivement constantes en ce qui concerne la taille des données, donc la conservation d'un grand nombre de données n'est pas un problème.
En fait, les seules métadonnées conservées par consommateur sont la position du consommateur dans le journal, appelée «offset». Ce décalage est contrôlé par le consommateur: normalement, un consommateur avance son décalage de manière linéaire lorsqu'il lit les messages, mais en fait, la position est contrôlée par le consommateur et il peut consommer les messages dans l'ordre de son choix. Par exemple, un consommateur peut revenir à un décalage plus ancien pour le retraiter.
Pour trouver le décalage de début à lire dans Kafka 0.8 Exemple de consommateur simple, ils disent
Kafka inclut deux constantes pour vous aider, kafka.api.OffsetRequest.EarliestTime()
trouve le début des données dans les journaux et commence à diffuser à partir de là, kafka.api.OffsetRequest.LatestTime()
ne diffusera que les nouveaux messages.
Vous pouvez également y trouver l'exemple de code pour gérer l'offset chez votre consommateur.
public static long getLastOffset(SimpleConsumer consumer, String topic, int partition,
long whichTime, String clientName) {
TopicAndPartition topicAndPartition = new TopicAndPartition(topic, partition);
Map<TopicAndPartition, PartitionOffsetRequestInfo> requestInfo = new HashMap<TopicAndPartition, PartitionOffsetRequestInfo>();
requestInfo.put(topicAndPartition, new PartitionOffsetRequestInfo(whichTime, 1));
kafka.javaapi.OffsetRequest request = new kafka.javaapi.OffsetRequest(requestInfo, kafka.api.OffsetRequest.CurrentVersion(),clientName);
OffsetResponse response = consumer.getOffsetsBefore(request);
if (response.hasError()) {
System.out.println("Error fetching data Offset Data the Broker. Reason: " + response.errorCode(topic, partition) );
return 0;
}
long[] offsets = response.offsets(topic, partition);
return offsets[0];
}