카프카 (Kafka) 주제에서 소비 된 데이터에 대해 집계를 수행하기 위해 Apache Kafka 스트리밍을 사용하고 있습니다. 그런 다음 집계가 소비되고 결과가 DB에 저장되는 다른 주제로 직렬화됩니다. 내가 생각하기에 꽤 고전적인 경우.Apache Kafka 스트리밍 KTable 변경 내역
총 호출의 결과는 Kafka changelog "topic"에 의해 백업 된 KTable을 생성합니다.
이것은 실제로는 그것보다 더 복잡하지만,의 그것 (평균을 계산하기 위해) 주어진 키에 대한 이벤트의 수와 합계를 저장하는 가정 해 봅시다 :
KTable<String, Record> countAndSum = groupedByKeyStream.aggregate(...)
변경 로그 "항목이"보이지 않는 보존 기간 설정 (내 글로벌 보존 설정에 따라 다른 주제와 달리 '만료'가 표시되지 않음)
이것은 실제로 미래의 이벤트가 동일한 키와 함께 제공 될 때 내 집계 상태를 잃지 않기 때문에 실제로/필요합니다.
그러나 장기적으로 이것은 changelog가 영원히 증가한다는 것을 의미합니다 (더 많은 키가 들어감). 그리고 잠재적으로 많은 키를 가지고 있습니다 (그리고 집계는 count/sum만큼 작지 않습니다).
특정 키의 이벤트 ("최종"으로 표시되는 이벤트)가 더 이상 없다는 것을 알 수있는 방법이 있으므로이 특정 키에 대한 집계 상태를 제거 할 수있는 방법이 있습니까? 내가 그것을 더 이상 필요로하지 않을 때, 그것이 단지 "단지"약간의 지연과 함께, 아마도 영원히 자라는 것을 피하기위한 변화로 그를?
아니면이 "문제"를 피하기 위해 카프카 스트리밍과 완전히 다른 방법이 있을까요?
나는 삭제 표시 메시지에 대해 읽었을 뿐이며, 키는 null 메시지를 삭제할 수 있습니다. 여전히 테스트가 필요합니다. 그리고 어쨌든 올바른 패턴이 무엇인지 여전히 관심이있었습니다. – Christophe
예 : 변경 로그 항목은 보존 기간이 아닌 로그 압축으로 구성됩니다. "최종"레코드를 받으면 집계는 집계 결과로 'null'을 반환 할 수 있습니다. 이렇게하면 기본 변경 로그 항목뿐만 아니라 로컬 RocksDB 저장소에서도 삭제됩니다. –
감사합니다. Matthias, 테스트를 마쳤으며 "최종"레코드에 도달 할 때 null을 반환하여 예상대로 진행됩니다. – Christophe