Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede durumlu akış için çıkış modu seçme konusu ele alınmaktadır. Yalnızca toplamalar içeren durum bilgisi olan akışlar için çıkış modu yapılandırması gerekir.
Birleştirmeler yalnızca ekleme çıkış modunu destekler ve çıkış modu yinelenenlerin kaldırılmasını etkilemez. Rastgele durum bilgisi olan işleçler mapGroupsWithState ve flatMapGroupsWithState kendi özel mantığını kullanarak kayıtları yayar, bu nedenle akışın çıkış modu davranışlarını etkilemez.
Durum bilgisi olmayan akış için tüm çıkış modları aynı şekilde davranır.
Çıkış modunu doğru yapılandırmak için durumlu akış, filigranlar ve tetikleyiciler hakkında bilgi sahibi olmanız gerekir. Aşağıdaki makalelere bakın:
- Durum bilgisi içeren akış nedir?
- Veri işleme eşiklerini denetlemek için filigranları uygulama
- Yapılandırılmış Akış tetikleyici aralıklarını yapılandırma
Çıkış modu nedir?
Yapılandırılmış Akış sorgusunun çıkış modu, her tetikleyici sırasında hangi kayıtların sorgu operatörleri tarafından üretileceğini belirler. Yayılabilir üç kayıt türü şunlardır:
- Gelecekteki işlemenin değiştirmeyeceği kayıtlar.
- Son tetikleyiciden sonra değişen kayıtlar.
- Durum tablosundaki tüm kayıtlar.
Durum bilgisi olan bir işleç tarafından üretilen belirli bir satır tetikleyiciden tetikleyiciye değişebileceğinden, hangi tür kayıtların yayıldığını bilmek durum bilgisi olan işleçler için önemlidir. Örneğin, bir akış toplama işleci belirli bir pencere için daha fazla satır aldığından, bu pencerenin toplama değerleri tetikleyiciler arasında değişebilir.
Durum bilgisi olmayan işleçler için, kayıt türleri arasındaki ayrım işlecin davranışını etkilemez. Durum bilgisi olmayan bir işlecin bir tetikleyici sırasında yaydığı kayıtlar, her zaman o tetikleyici sırasında işlenen kaynak kayıtlardır.
Kullanılabilir çıkış modları
Operatöre belirli bir tetikleme sırasında hangi kayıtların yayınlanacağını belirten üç çıkış modu vardır.
| Çıkış Modu | Açıklama |
|---|---|
| Ekleme modu (varsayılan) | Varsayılan olarak, akış sorguları ekleme modunda çalışır. Bu modda işleçler yalnızca gelecekteki tetikleyicilerde değişmeyen satırları yayar. Durumlu operatörler, bunun ne zaman gerçekleştiğini belirlemek için zaman damgasını kullanır. |
| Güncelleştirme modu | Güncelleştirme modunda, işleçler tetikleyici sırasında değişen tüm satırları yayımlar, yayımlanan kayıt sonraki bir tetikleyicide değişebilecek olsa da. |
| Tamamlama modu | Tam mod seçeneği yalnızca akış veri toplamlarıyla çalışır. Tam modda çalışırken, işleç tarafından üretilen tüm sonuç satırları aşağıya iletilir. |
Üretimle ilgili dikkat edilmesi gerekenler
Durum bilgisi olan birçok akış işlemi için ekleme ve güncelleştirme modları arasında seçim yapmanız gerekir. Aşağıdaki bölümlerde, kararınızı bilgilendirebilecek önemli noktalar özetlenmiştir.
Not
Tam modda bazı uygulamalar vardır, ancak veri ölçeklendirildikçe düşük performans gösterilebilir. Databricks, durum bilgisi olan birçok işlemde artımlı işleme ile tam modla ilişkili semantik garantileri elde etmek için maddileştirilmiş görünümlerin kullanılmasını önerir. Bkz Gerçekleştirilmiş görünümler.
Uygulama semantiği
Uygulama semantiği, aşağı akış uygulamalarının akış verilerini nasıl kullandığını açıklar.
Aşağı akış hizmetlerinin her aşağı akış yazma işlemi için tek bir eylem gerçekleştirmesi gerekiyorsa çoğu durumda ekleme modunu kullanın. Örneğin, havuza yazılan her yeni kayıt için bildirim gönderen bir aşağı akış bildirim hizmetiniz varsa, ekleme modu her kaydın yalnızca bir kez yazılmasını sağlar. Güncelleştirme modu, durum bilgileri her değiştiğinde kaydı yazar ve bu da çok sayıda güncelleştirmeyle sonuçlanır.
Aşağı akış hizmetlerinin yeni sonuçlara ihtiyacı varsa, güncelleme modu hedefinizin mümkün olduğunca güncel kalmasını sağlar. Örnekler arasında özellikleri gerçek zamanlı olarak okuyan bir makine öğrenmesi modeli veya gerçek zamanlı toplamaları izleyen bir analiz panosu yer alır.
Operatör ve veri havuzu uyumluluğu
Yapılandırılmış Akış, Apache Spark'ta kullanılabilen tüm işlemleri desteklemez ve bazı akış işlemleri tüm çıkış modlarında desteklenmez. Operatör sınırlamaları hakkında daha fazla bilgi için işletim sistemi akış belgelerine bakın.
Tüm havuzlar tüm çıkış modlarını desteklemez. Hem Unity Kataloğu tarafından yönetilen tüm tabloları destekleyen Delta Lake hem de Kafka tüm çıkış modlarını destekler. Daha fazla bilgi için sink uyumluluğu hakkında, OSS akış belgelerine bakın.
Gecikme süresi ve maliyet
Çıkış modu, kayıt yazmadan önce geçmesi gereken süreyi etkiler ve yazılan verilerin sıklığı ve miktarı akış işlem hatlarıyla ilişkili maliyetleri etkileyebilir.
Ekleme modu, durum bilgisi olan işleçleri yalnızca durum bilgisi sonuçlar sonlandırıldıktan sonra sonuçları yayınlamaya zorlar. Bu süre, filigran gecikmeniz kadar veya daha uzun olabilir. Çıktı ekleme modundaki 1 hour filigran gecikmesi, kayıtlarınızın aşağı akışa aktarılmadan önce en az bir saatlik gecikme yaşadığı anlamına gelir.
Güncelleştirme modu, toplama değeri başına tetikleyici başına bir yazma işlemiyle sonuç verir. Veri alıcınız yazma başına, kayıt başına ücret alıyorsa, eşik değeri süresi dolmadan önce kayıtlar birçok kez güncelleniyorsa bu pahalı olabilir.
Yapılandırma örnekleri
Aşağıdaki kod örnekleri Unity Kataloğu tablolarında akış güncelleştirmeleri için çıkış modunu yapılandırmayı gösterir:
Piton
# Append output mode (default)
(df.writeStream
.toTable("target_table")
)
# Append output mode (same as default behavior)
(df.writeStream
.outputMode("append")
.toTable("target_table")
)
# Update output mode
(df.writeStream
.outputMode("update")
.toTable("target_table")
)
# Complete output mode
(df.writeStream
.outputMode("complete")
.toTable("target_table")
)
Scala programlama dili
// Append output mode (default)
df.writeStream
.toTable("target_table")
// Append output mode (same as default behavior)
df.writeStream
.outputMode("append")
.toTable("target_table")
// Update output mode
df.writeStream
.outputMode("update")
.toTable("target_table")
// Complete output mode
df.writeStream
.outputMode("complete")
.toTable("target_table")
PySpark DataStreamWriter.outputMode veya Scala DataStreamWriter.outputMode için OSS belgelerine bakın.
Durumlu akış ve çıkış modları örneği
Aşağıdaki örnek, durumsal akışta çıkış modunun filigranlarla etkileşimini düşünmenize yardım etmek içindir.
15 dakikalık filigran gecikmesiyle bir mağazada her saat başı oluşturulan toplam geliri hesaplayan bir akış toplamını düşünün. İlk mikrobatch aşağıdaki kayıtları işler:
- 15 TL saat 14:40'ta
- 10 TL saat 14:30'da
- Saat 15:10'da 30 ABD doları
Bu noktada, motorun zaman işareti, görülen en uzun süreden (15:10) 15 dakikanın (gecikme) çıkartılmasıyla 14:55'tir. Akış toplama işlecinin durumunda aşağıdakiler bulunur:
-
[2pm, 3pm]: $25 -
[3pm, 4pm]: $30
Aşağıdaki tabloda her çıkış modunda neler olacağı özetlenmiştir:
| Çıkış modu | Sonuç ve neden |
|---|---|
| Ekle | Akış toplama işleci aşağıya hiçbir şey yaymaz. Bunun nedeni, bu pencerelerin her ikisinin de sonraki tetikleyicide yeni değerler göründüğünde değişebileceğidir: 14:55 filigranı, 14:55'in sonundaki kayıtların hala gelebileceğini ve bu kayıtların [2pm, 3pm] penceresine veya [3pm, 4pm] penceresine düşebileceğini gösterir. |
| Güncelleştirmek | Operatör, her iki kayıt da güncelleştirme aldığı için her iki kaydı da yayar. |
| Tamamla | İşleci tüm kayıtları yayınlar. |
Şimdi akışın bir kayıt daha aldığını varsayalım:
- 15:20'de 20 ABD doları
Motor, 15:20'den 15 dakika çıkardığından filigran 15:05'e güncellenir. Bu noktada, akış toplama işlecinin durumu aşağıdaki gibidir:
-
[2pm, 3pm]: $25 -
[3pm, 4pm]: $50
Aşağıdaki tabloda her çıkış modunda neler olacağı özetlenmiştir:
| Çıkış modu | Sonuç ve neden |
|---|---|
| Ekle | Akış toplama operatörü, 15:05 filigranının, [2pm, 3pm] penceresinin sonundan daha büyük olduğunu gözlemler. Filigranın tanımına göre, bu pencere artık değişemez, bu yüzden [2pm, 3pm] penceresini çıkarır. |
| Güncelleştirmek | Durum değeri 30 TL'den 50 TL'ye değiştiğinden, akış toplama operatörü [3pm, 4pm] penceresini yayınlar. |
| Tamamla | İşleci tüm kayıtları yayınlar. |
Aşağıda durum bilgisi olan işleçlerin her ekleme modunda nasıl davranacakları özetlenmiştir:
- Ekleme modunda, filigran gecikmesi sonrasında kayıtları bir kez yazın.
- Güncelleştirme modunda, önceki tetikleyiciden bu yana değişen kayıtları yazın.
- Tam modda, stateful operatör tarafından şimdiye kadar üretilen tüm kayıtları kaydedin.