2017-06-29 29 views
6

Wyobraź sobie przypadek użycia, w którym zdarzenia są przesyłane strumieniowo na użytkownika, ale tylko pierwszy tydzień wydarzeń jest interesujący. W tym okresie logika stanów odbywa się za pomocą mapWithState. Po tym okresie zdarzenia przychodzące użytkownika powinny zostać zignorowane.Spark streaming mapWithState timeout bez usuwania

Ponieważ stan użytkownika zabiera pamięć, warto zmienić ją po okresie użytkownika na prosty, już widziany znacznik.

Jeśli jakieś wydarzenie przyjdzie dla tego użytkownika tydzień lub później po pierwszym zdarzeniu, łatwo jest zmienić stan na ten już widziany znacznik.

Ale jeśli żadne zdarzenia nie pojawią się po tym tygodniu, stan nigdy nie zmieni się na już widziany znacznik, a stan będzie nadal zajmował pamięć na zawsze.

O ile rozumiem, dodanie limitu czasu (do stanu użytkownika) nie pomoże, ponieważ nie można zmienić stanu dla stanu limitu czasu (ma sens, ponieważ zostanie usunięty).

Czy istnieje prosty sposób na osiągnięcie tego przypadku użycia?

+0

* O ile rozumiem, dodanie limitu czasu (do stanu użytkownika) nie pomoże, ponieważ nie można zmienić stanu dla stanu limitu czasu (ma sens, ponieważ zostanie usunięty). * Czy możesz sprecyzować, co przez to rozumiesz? Jeśli stan przekroczył limit czasu, oznacza to, że nie nastąpiło nowe zdarzenie w zdefiniowanym okresie. –

+0

To prawda, że ​​limit czasu oznacza, że ​​nie pojawiły się nowe zdarzenia dla tego użytkownika przez tydzień, ale oznacza to również, że stan zostanie usunięty dla tego użytkownika, co oznacza, że ​​następne wydarzenie, które pojawi się w nim będzie błędnie uważane za jego pierwsze wydarzenie zawsze. To, co chciałbym, to zamiast stanu, który ma zostać usunięty, zaktualizuj go do już widocznego znacznika. Nie jestem pewien, czy aktualny interfejs API obsługuje ten przypadek użycia ... – harel

+0

Tak więc, w zasadzie, potrzebujesz mechanizmu deduplikacji? Jeśli widziałeś użytkownika, chcesz odrzucić wszystkie swoje dane w przód? –

Odpowiedz

0

Z tego co rozumiem, Spark's 2.2 mapGroupsWithState ma bogatsze limity czasu, które można wykorzystać nie tylko do usunięcia stanu, ale także do jego zmiany (sprawdź here).

Powiązane problemy