まだサポートされているとは思わないでください。このJIRAの問題「トピックの削除サポートの追加」をご覧ください。
手動で削除するには:
- クラスターをシャットダウンします
- (で指定されたクリーンカフカログディレクトリ
log.dir
カフカにおける属性設定ファイル)にも飼育係のデータ
- クラスターを再起動します
特定のトピックについて、あなたができることは
- カフカを止めろ
- パーティションに固有のクリーンなkafkaログ。kafkaはログファイルを「logDir / topic-partition」の形式で保存するため、「MyTopic」という名前のトピックの場合、パーティションID0のログは属性で指定された
/tmp/kafka-logs/MyTopic-0
場所に保存されます。/tmp/kafka-logs
log.dir
- kafkaを再起動します
これはNOT
適切で推奨されるアプローチですが、機能するはずです。Kafkaブローカー構成ファイルでは、log.retention.hours.per.topic
属性を使用して定義しますThe number of hours to keep a log file before deleting it for some specific topic
また、消費者がメッセージを読むとすぐにメッセージが削除される方法はありますか?
Kafkaドキュメントから:
Kafkaクラスターは、公開されたすべてのメッセージを、消費されたかどうかに関係なく、構成可能な期間保持します。たとえば、ログの保持が2日に設定されている場合、メッセージが公開されてから2日間は使用可能になり、その後は破棄されてスペースが解放されます。Kafkaのパフォーマンスはデータサイズに関して実質的に一定であるため、大量のデータを保持することは問題ではありません。
実際、消費者ごとに保持される唯一のメタデータは、「オフセット」と呼ばれる、ログ内の消費者の位置です。このオフセットはコンシューマーによって制御されます。通常、コンシューマーはメッセージを読み取るときにオフセットを直線的に進めますが、実際には位置はコンシューマーによって制御され、メッセージを好きな順序で消費できます。たとえば、コンシューマーは古いオフセットにリセットして再処理できます。
Kafka 0.8 Simple Consumerの例で読む開始オフセットを見つけるために、彼らは言います
Kafkaには、役立つ2つの定数が含まkafka.api.OffsetRequest.EarliestTime()
れており、ログでデータの先頭を見つけてそこからストリーミングを開始し、kafka.api.OffsetRequest.LatestTime()
新しいメッセージのみをストリーミングします。
コンシューマー側でオフセットを管理するためのサンプルコードもあります。
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];
}