2017-12-09 13 views
0

카프카 (Kafka) 주제에서 소비 된 데이터에 대해 집계를 수행하기 위해 Apache Kafka 스트리밍을 사용하고 있습니다. 그런 다음 집계가 소비되고 결과가 DB에 저장되는 다른 주제로 직렬화됩니다. 내가 생각하기에 꽤 고전적인 경우.Apache Kafka 스트리밍 KTable 변경 내역

총 호출의 결과는 Kafka changelog "topic"에 의해 백업 된 KTable을 생성합니다.

이것은 실제로는 그것보다 더 복잡하지만,의 그것 (평균을 계산하기 위해) 주어진 키에 대한 이벤트의 수와 합계를 저장하는 가정 해 봅시다 :

KTable<String, Record> countAndSum = groupedByKeyStream.aggregate(...) 

변경 로그 "항목이"보이지 않는 보존 기간 설정 (내 글로벌 보존 설정에 따라 다른 주제와 달리 '만료'가 표시되지 않음)

이것은 실제로 미래의 이벤트가 동일한 키와 함께 제공 될 때 내 집계 상태를 잃지 않기 때문에 실제로/필요합니다.

그러나 장기적으로 이것은 changelog가 영원히 증가한다는 것을 의미합니다 (더 많은 키가 들어감). 그리고 잠재적으로 많은 키를 가지고 있습니다 (그리고 집계는 count/sum만큼 작지 않습니다).

특정 키의 이벤트 ("최종"으로 표시되는 이벤트)가 더 이상 없다는 것을 알 수있는 방법이 있으므로이 특정 키에 대한 집계 상태를 제거 할 수있는 방법이 있습니까? 내가 그것을 더 이상 필요로하지 않을 때, 그것이 단지 "단지"약간의 지연과 함께, 아마도 영원히 자라는 것을 피하기위한 변화로 그를?

아니면이 "문제"를 피하기 위해 카프카 스트리밍과 완전히 다른 방법이 있을까요?

+0

나는 삭제 표시 메시지에 대해 읽었을 뿐이며, 키는 null 메시지를 삭제할 수 있습니다. 여전히 테스트가 필요합니다. 그리고 어쨌든 올바른 패턴이 무엇인지 여전히 관심이있었습니다. – Christophe

+0

예 : 변경 로그 항목은 보존 기간이 아닌 로그 압축으로 구성됩니다. "최종"레코드를 받으면 집계는 집계 결과로 'null'을 반환 할 수 있습니다. 이렇게하면 기본 변경 로그 항목뿐만 아니라 로컬 RocksDB 저장소에서도 삭제됩니다. –

+1

감사합니다. Matthias, 테스트를 마쳤으며 "최종"레코드에 도달 할 때 null을 반환하여 예상대로 진행됩니다. – Christophe

답변

1

예 : 변경 로그 항목은 보존 시간이 아닌 로그 압축으로 구성됩니다. "최종"레코드를 받으면 집계는 집계 결과로 null을 반환 할 수 있습니다. 이렇게하면 기본 변경 로그 항목뿐만 아니라 로컬 RocksDB 저장소에서도 삭제됩니다.