2017-09-14 2 views
1

카프카 항목을 삭제하지 않고 대기열 메시지를 삭제할 수있는 방법이 있습니까?
소비자를 활성화 할 때 대기열 메시지를 삭제하려고합니다. 보존 시간을 재설정삭제하지 않고 Kafka 대기중인 메시지를 삭제/정리하는 방법 항목

  1. $ ./bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic MyTopic --config retention.ms=1000

  2. 삭제 카프카가

    $ rm -rf /data/kafka-logs/<topic/Partition_name>

,691을 파일 :

나는이 같은 여러 가지 방법을 알고있다

+0

먼저 언급 한 보유 시간 트릭이 훨씬 좋습니다. 두 번째 방법은 복제 된 주제에 대해 문제를 일으키고 주제에 대한 메타 데이터를 현실과 일치시키지 않습니다. 오프셋 번호는 0으로 돌아 가지 않습니다. – dawsaw

답변

2

0.11 이상에서는 bin/kafka-delete-records.sh 명령을 실행하여 메시지를 삭제하도록 표시 할 수 있습니다.

https://github.com/apache/kafka/blob/trunk/bin/kafka-delete-records.sh

예를 들어 다음 새 kafka-delete-records.sh 명령 행 도구를 사용하여 100 개의 메시지 (90)를 삭제 100 메시지

seq 100 | ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mytest 

을 게시

./bin/kafka-delete-records.sh --bootstrap-server localhost:9092 --offset-json-file ./offsetfile.json 

곳 offsetfile.json에 포함 된 내용은

입니다.

처음부터 메시지를 사용하여 100 메시지 중 90 개가 실제로 삭제 된 것으로 표시되는지 확인하십시오.

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest --from-beginning 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
+0

답장을 보내 주셔서 감사합니다. 그것은 내가 원했던 것에 매우 가깝습니다. 메시지가 얼마나 대기 중인지 모른 채 모든 오프셋을 삭제할 수 있는지 알고 계십니까? json을 편집하여이 작업을 수행 할 수 있습니까? – Tachikoma

+0

예, 모든 메시지를 삭제할 수 있습니다. 또한이 도구를 사용하여 건너 뛸 수 있으며 소스 코드를보고 동일한 API를 직접 호출하여 지정된 오프셋 (최신 오프셋 포함) 이전에 레코드를 삭제하는 자체 프로그램을 작성하거나 타임 스탬프별로 오프셋을 조회하여 모든 레코드를 삭제할 수 있습니다 특정 시간 전에. 년 10 월 2017 년 밖으로이 도구의 사용이 더 카프카 1.0 문서화되어야한다 API는 내가 발견 한 –

+0

그 { "파티션" [{ "항목": "테스트", "파티션": 0, "offset": -1 }], "version": 1 } 은 주제의 모든 메시지를 지울 수 있습니다. 다음 문제는 다른 그룹의 동일한 주제를 삭제한다는 것입니다. 예를 들어 "mytest"항목이 cosumer 그룹 "group1"에 있고 "group2"가 "mytest"항목을보고 있었으면이 도구는 두 그룹의 모든 메시지를 삭제합니다. 이 문제를 막을 수있는 방법이 있습니까? – Tachikoma

관련 문제