2017-05-09 1 views
1

Ich experimentieren mit der Low-Level-Prozessor-API. Ich mache Datenaggregation bei eingehenden Datensätzen mit der Prozessor-API und schreibe die aggregierten Datensätze in RocksDB.Kafka Streams - Low-Level-Prozessor API - RocksDB TimeToLive (TTL)

Allerdings möchte ich die Datensätze in der Rocksdb hinzugefügt, um nur für 24 Stunden aktiv zu sein. Nach 24 Stunden sollte der Datensatz gelöscht werden. Dies kann durch Ändern der TTL-Einstellungen erfolgen. Allerdings gibt es nicht viel Dokumentation, wo ich Hilfe dazu bekommen kann.

Wie ändere ich den ttl-Wert? Welche Java-API sollte ich verwenden, um die TTL-Zeit auf 24 Stunden und was ist die aktuelle Standard-TTL-Einstellungen Zeit?

Antwort

1

Ich glaube, das ist derzeit nicht über die API oder Konfiguration ausgesetzt. RocksDBStore übergibt eine hartcodierte TTL beim Öffnen einer RocksDB: https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/state/internals/RocksDBStore.java#L158 und der hardcoded Wert ist einfach TTL_SECONDS = TTL_NOT_USED (-1) (siehe Zeile 79 in der gleichen Datei).

Es sind 2 offene Ticket in Bezug auf TTL-Unterstützung in den staatlichen Läden aussetzt: KAFKA-4212 und KAFKA-4273: https://issues.apache.org/jira/issues/?jql=project%20%3D%20KAFKA%20AND%20text%20~%20%22rocksdb%20ttl%22 Ich schlage vor, kommentieren Sie auf einem von ihnen Ihren Anwendungsfall beschreiben sie vorwärts in Bewegung zu bringen.

In der Zwischenzeit, wenn Sie die TTL-Funktionalität sofort benötigen, sind State Stores steckbar, und die RocksDBStore-Quellen sind sofort verfügbar, so dass Sie es ausschneiden und Ihren TTL-Wert festlegen können (oder wie die Pull-Anforderung von KAFKA). 4273 schlägt vor, es aus den Configs zu beziehen).

Ich weiß, das ist nicht ideal und hoffe aufrichtig, dass jemand mit einer zufriedenstellenderen Antwort kommt.

Verwandte Themen