Azure Stream Analytics sorgu paralelleştirme özelliğinden yararlanın
Bu makalede, Azure Stream Analytics paralelleştirme avantajlarından nasıl yararlanabilmeniz gösterilmektedir. Giriş bölümlerini yapılandırarak ve analiz sorgu tanımını ayarlayarak Stream Analytics işlerinin nasıl ölçeklendirileyeceğinizi öğrenirsiniz. Bir önkoşul olarak, akış birimlerinin anlaşılması ve ayarlanmasıbölümünde açıklanan akış birimi kavramı hakkında bilgi sahibi olmak isteyebilirsiniz.
Stream Analytics işinin parçaları nelerdir?
Stream Analytics iş tanımı en az bir akış girişi, bir sorgu ve çıkış içerir. Girişler, işin veri akışını okuduğu yerdir. Sorgu, veri girişi akışını dönüştürmek için kullanılır ve çıktı işin iş sonuçlarını göndereceği yerdir.
Giriş ve çıkışdaki bölümler
Bölümlendirme, verileri bölüm anahtarınagöre alt kümelere bölmenizi sağlar. Giriş (örneğin Event Hubs) bir anahtarla bölümlense, Stream Analytics işinize giriş eklenirken Bu bölüm anahtarını belirtmeniz kesinlikle önerilir. Stream Analytics işi ölçeklendirme, giriş ve çıkışdaki bölümlerden yararlanır. Stream Analytics bir iş, farklı bölümleri paralel olarak kullanabilir ve yazabilir, bu da üretilen işi artırır.
Girişler
Tüm Azure Stream Analytics girişi bölümlemenin avantajlarından yararlanabilir:
- EventHub (uyumluluk düzeyi 1,1 veya altı kullanılıyorsa bölüm anahtarı ile PARTITION anahtar sözcüğü ile açık olarak ayarlamanız gerekir)
- IoT Hub (uyumluluk düzeyi 1,1 veya altı kullanılıyorsa bölüm anahtarı ile PARTITION BY anahtar sözcüğüyle açık olarak ayarlamanız gerekir)
- Blob depolama
Çıkışlar
Stream Analytics ile çalışırken çıktılardan bölümlemeden yararlanabilirsiniz:
- Azure Data Lake Storage
- Azure İşlevleri
- Azure Tablosu
- BLOB depolama (Bölüm anahtarını açıkça ayarlayabilir)
- Cosmos DB (Bölüm anahtarını açıkça ayarlamanız gerekir)
- Event Hubs (Bölüm anahtarını açıkça ayarlamanız gerekir)
- IoT Hub (Bölüm anahtarını açıkça ayarlamanız gerekir)
- Service Bus
- İsteğe bağlı bölümlendirme ile SQL ve Azure SYNAPSE Analytics: Azure SQL veritabanı 'Na çıkışhakkında daha fazla bilgi için bkz..
Power BI Bölümlendirmeyi desteklemiyor. Ancak, Bu bölümde açıklandığı gibi girişi yine de bölümleyebilirsiniz
Bölümler hakkında daha fazla bilgi için aşağıdaki makalelere bakın:
Embarmsski paralel işler
Azure Stream Analytics ' deki en ölçeklenebilir senaryo, embarsanki paralel bir iş. Girişin bir bölümünü bir sorgunun bir bölümüne, çıktının bir bölümüne bağlar. Bu paralellik aşağıdaki gereksinimlere sahiptir:
Sorgu mantığınızın aynı sorgu örneği tarafından işlendiği aynı anahtara bağlı olması durumunda, olayların girişin aynı bölümüne gitdiğinizden emin olmanız gerekir. Event Hubs veya IoT Hub için, bu, olay verilerinin Partitionkey değer kümesine sahip olması gerektiği anlamına gelir. Alternatif olarak, bölümlenmiş Gönderenler kullanabilirsiniz. BLOB depolama için bu, olayların aynı bölüm klasörüne gönderildiği anlamına gelir. Örnek, giriş Olay Hub 'ı bölüm anahtarı olarak kullanıcı kimliğine göre bölümlenen Kullanıcı adı başına verileri toplayan bir sorgu örneği olabilir. Ancak, sorgu mantığınızın aynı anahtar aynı sorgu örneği tarafından işlenmesini gerektirmiyorsa, bu gereksinimi yoksayabilirsiniz. Bu mantığın bir örneği basit bir Select-Project-Filter sorgusu olacaktır.
Sonraki adım sorgunuzu bölümleyip bölümlendirilmelidir. Uyumluluk düzeyi 1,2 veya üzeri (önerilir) olan işler için, özel sütun giriş ayarlarında bölüm anahtarı olarak belirtilebilir ve iş otomatik olarak paralellized olacaktır. Uyumluluk düzeyi 1,0 veya 1,1 olan işler, sorgunuzun tüm adımlarında bölüm, PARTITIONıD tarafından kullanmanız gerekir. Birden çok adıma izin verilir, ancak tümünün aynı anahtarla bölümlenmesi gerekir.
Stream Analytics desteklenen çıktıların çoğu bölümlemenin avantajlarından yararlanabilir. İşi Bölümlendirmeyi desteklemeyen bir çıkış türü kullanırsanız, işiniz farkında olmaz. Olay Hub 'ı çıktıları için bölüm anahtarı sütununun sorguda kullanılan aynı bölüm anahtarına ayarlandığından emin olun. Daha fazla ayrıntı için çıkış bölümüne bakın.
Giriş bölümlerinin sayısı, çıkış bölümlerinin sayısına eşit olmalıdır. BLOB depolama çıktısı, bölümleri destekleyebilir ve yukarı akış sorgusunun bölümleme şemasını devralır. BLOB depolama için bir bölüm anahtarı belirtildiğinde, veriler giriş bölümü başına bölümlenir, bu nedenle sonuç hala tamamen paraleldir. Tam paralel bir işe izin veren bölüm değerlerinin örnekleri aşağıda verilmiştir:
- 8 Olay Hub 'ı giriş bölümleri ve 8 Olay Hub 'ı çıkış bölümleri
- 8 Olay Hub 'ı giriş bölümleri ve BLOB depolama çıkışı
- Rastgele kardinalite ile özel bir alan tarafından bölümlenmiş 8 Olay Hub 'ı giriş bölümü ve BLOB depolama çıkışı
- 8 BLOB depolama giriş bölümleri ve BLOB depolama çıkışı
- 8 BLOB depolama giriş bölümleri ve 8 Olay Hub 'ı çıkış bölümleri
Aşağıdaki bölümlerde, emsanki paralel paralel bazı örnek senaryolar ele alınmaktadır.
Basit sorgu
- Giriş: 8 bölümlü Olay Hub 'ı
- Çıkış: 8 bölümlü Olay Hub 'ı ("bölüm anahtarı sütunu" "PartitionID" kullanacak şekilde ayarlanmalıdır)
Sorgu:
--Using compatibility level 1.2 or above
SELECT TollBoothId
FROM Input1
WHERE TollBoothId > 100
--Using compatibility level 1.0 or 1.1
SELECT TollBoothId
FROM Input1 PARTITION BY PartitionId
WHERE TollBoothId > 100
Bu sorgu basit bir filtredir. Bu nedenle, Olay Hub 'ına gönderilen girişi bölümlemek için endişelenmemiz gerekmiyor. Uyumluluk düzeyi 1,2 ' dan önce bölüm PartitionID yan tümcesini içermelidir, bu nedenle daha önce gereksinim #2 gereksinimini karşılar. Çıktı için, Bölüm anahtarının PartitionID olarak ayarlanması için, işteki Olay Hub 'ı çıkışını yapılandırmamız gerekir. Son denetim, giriş bölümlerinin sayısının, çıkış bölümlerinin sayısına eşit olduğundan emin olmanızı sağlar.
Gruplandırma anahtarı olan sorgu
- Giriş: 8 bölümlü Olay Hub 'ı
- Çıkış: BLOB depolama
Sorgu:
--Using compatibility level 1.2 or above
SELECT COUNT(*) AS Count, TollBoothId
FROM Input1
GROUP BY TumblingWindow(minute, 3), TollBoothId
--Using compatibility level 1.0 or 1.1
SELECT COUNT(*) AS Count, TollBoothId
FROM Input1 Partition By PartitionId
GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
Bu sorguda bir gruplandırma anahtarı vardır. Bu nedenle, birlikte gruplanmış olayların aynı Olay Hub 'ı bölümüne gönderilmesi gerekir. Bu örnekte, Tollboothıd tarafından gruplandırdığımız için, olaylar Olay Hub 'ına gönderildiğinde, bölüm anahtarı olarak Tollboothıd 'nin kullanıldığından emin olmanız gerekir. Ardından, bu bölüm düzeninden devralması ve tam paralelleştirme özelliğini etkinleştirmek için, bu bölüm tarafından PartitionID Ile bölüm kullanabiliriz. Çıkış blob depolaması olduğundan, gereksinim #4 göre bölüm anahtarı değerini yapılandırma konusunda endişelenmenize gerek kalmaz.
Emsanki paralel olmayan senaryolara örnek
Önceki bölümde bazı emantik paralel senaryolar gösterildi. Bu bölümde, tüm gereksinimleri karşılamayan, emstik paralel olması gereken senaryoları tartıştık.
Eşleşmeyen bölüm sayısı
- Giriş: 8 bölümlü Olay Hub 'ı
- Çıkış: 32 bölümlü Olay Hub 'ı
Giriş bölümü sayısı, çıkış bölümü sayısıyla eşleşmiyorsa, sorgu ne olursa olsun, topoloji emson olarak paralel değildir. Ancak yine de bir düzey veya paralelleştirme elde edebilirsiniz.
Bölümlenmemiş çıkış kullanan sorgu
- Giriş: 8 bölümlü Olay Hub 'ı
- Çıkış: Power BI
Power BI çıktısı şu anda Bölümlendirmeyi desteklemiyor. Bu nedenle, bu senaryo emanmaz paralel değildir.
Değerlere göre farklı BÖLÜMLERI olan çok adımlı sorgu
- Giriş: 8 bölümlü Olay Hub 'ı
- Çıkış: 8 bölümlü Olay Hub 'ı
- Uyumluluk düzeyi: 1,0 veya 1,1
Sorgu:
WITH Step1 AS (
SELECT COUNT(*) AS Count, TollBoothId, PartitionId
FROM Input1 Partition By PartitionId
GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
)
SELECT SUM(Count) AS Count, TollBoothId
FROM Step1 Partition By TollBoothId
GROUP BY TumblingWindow(minute, 3), TollBoothId
Gördüğünüz gibi, ikinci adım bölümlendirme anahtarı olarak Tollboothıd kullanır. Bu adım ilk adımla aynı değildir ve bu nedenle bir karışık hale getirmemizi gerektirir.
Değerlere göre farklı BÖLÜMLERI olan çok adımlı sorgu
- Giriş: 8 bölümlü Olay Hub 'ı
- Çıkış: 8 bölümlü ("bölüm anahtarı sütunu") Olay Hub 'ı "Tollboothıd" kullanılacak şekilde ayarlanmalıdır
- Uyumluluk düzeyi-1,2 veya üzeri
Sorgu:
WITH Step1 AS (
SELECT COUNT(*) AS Count, TollBoothId
FROM Input1
GROUP BY TumblingWindow(minute, 3), TollBoothId
)
SELECT SUM(Count) AS Count, TollBoothId
FROM Step1
GROUP BY TumblingWindow(minute, 3), TollBoothId
Uyumluluk düzeyi 1,2 veya üzeri, varsayılan olarak paralel sorgu yürütmeyi mümkün bir şekilde sunar. Örneğin, önceki bölümdeki sorgu "Tollboothıd" sütunu giriş bölümü anahtarı olarak ayarlandığı sürece bölümlenecek. PARTITION BY PartitionID yan tümcesi gerekli değildir.
Bir işin en fazla akış birimi sayısını hesaplama
Bir Stream Analytics işi tarafından kullanılabilecek toplam akış birimi sayısı, iş için tanımlanan sorgudaki adım sayısına ve her adımın bölüm sayısına bağlıdır.
Sorgudaki adımlar
Sorguda bir veya daha fazla adım olabilir. Her adım WITH anahtar sözcüğü tarafından tanımlanan bir alt sorgu olur. WITH anahtar sözcüğü dışında (yalnızca bir sorgu) sorgu, aşağıdaki sorgudaki Select ifadesiyle birlikte bir adım olarak da sayılır:
Sorgu:
WITH Step1 AS (
SELECT COUNT(*) AS Count, TollBoothId
FROM Input1 Partition By PartitionId
GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
)
SELECT SUM(Count) AS Count, TollBoothId
FROM Step1
GROUP BY TumblingWindow(minute,3), TollBoothId
Bu sorguda iki adım vardır.
Not
Bu sorgu, makalenin ilerleyen bölümlerinde daha ayrıntılı bir şekilde ele alınmıştır.
Bir adımı bölümle
Bir adımın bölümlenmesi için aşağıdaki koşullar gereklidir:
- Giriş kaynağının bölümlenmiş olması gerekir.
- Sorgunun Select ifadesinin bölümlenmiş bir giriş kaynağından okuması gerekir.
- Adım içindeki sorgunun bölüm anahtar sözcüğüne sahip olması gerekir.
Bir sorgu bölümlenmiş olduğunda, giriş olayları ayrı bölüm gruplarında işlenir ve toplanır ve her bir grup için çıkış olayları oluşturulur. Birleşik bir toplama isterseniz, toplanacak ikinci bölümlendirilmemiş bir adım oluşturmanız gerekir.
Bir iş için en fazla akış birimini hesapla
Tüm bölümlenmemiş adımlar, bir Stream Analytics işi için altı akış birimi (SUs) kadar ölçeklendirebilir. Buna ek olarak, bölümlenmiş bir adımda her bölüm için 6 SUs ekleyebilirsiniz. Aşağıdaki tabloda bazı örnekleri görebilirsiniz.
| Sorgu | İş için en fazla SUs |
|---|---|
|
6 |
|
96 (6 * 16 Bölüm) |
|
6 |
|
24 (bölümlenmiş adımlarla ilgili olarak 16 bölümlenmemiş adımlar için 6 |
Ölçeklendirme örnekleri
Aşağıdaki sorgu, üç dakikalık bir pencere içindeki otomobillerin sayısını üç tollya sahip olan ücretli bir istasyondan hesaplar. Bu sorgu, altı adede kadar SUs 'e kadar ölçeklendirilebilir.
SELECT COUNT(*) AS Count, TollBoothId
FROM Input1
GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
Sorgu için daha fazla SUs kullanmak istiyorsanız, hem giriş veri akışı hem de sorgu bölümlenmiş olmalıdır. Veri akışı bölümü 3 olarak ayarlandığı için, aşağıdaki değiştirilen sorgu 18 adede kadar ölçeklendirilebilir:
SELECT COUNT(*) AS Count, TollBoothId
FROM Input1 Partition By PartitionId
GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
Bir sorgu bölümlenmiş olduğunda, giriş olayları işlenir ve ayrı bölüm gruplarında toplanır. Her grup için çıkış olayları da oluşturulur. Gruplandırma alanı, giriş veri akışındaki bölüm anahtarı olmadığında bölümlendirme bazı beklenmedik sonuçlara neden olabilir. Örneğin, önceki sorgudaki Tollboothıd alanı Input1 bölüm anahtarı değildir. Sonuç olarak, Tollstand #1 verileri birden çok bölüme yayılabilecek.
Input1 bölümlerinin her biri Stream Analytics tarafından ayrı olarak işlenir. Sonuç olarak, aynı çıkış penceresinde aynı tollstand için araba sayısı birden çok kaydı oluşturulacaktır. Giriş bölümü anahtarı değiştirilemediğinde, aşağıdaki örnekte olduğu gibi, bölümler arasında değerleri toplamak için bölüm dışı bir adım eklenerek bu sorun düzeltilebilir:
WITH Step1 AS (
SELECT COUNT(*) AS Count, TollBoothId
FROM Input1 Partition By PartitionId
GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
)
SELECT SUM(Count) AS Count, TollBoothId
FROM Step1
GROUP BY TumblingWindow(minute, 3), TollBoothId
Bu sorgu, 24 SUs 'e ölçeklendirilebilir.
Not
İki akışı birleştiriyorsanız, akışların birleştirmeleri oluşturmak için kullandığınız sütunun bölüm anahtarına göre bölümlendiğinden emin olun. Ayrıca, her iki akışda aynı sayıda bölüm olduğundan emin olun.
Daha yüksek olan Through, ölçeğe göre elde
Büyük bir paralel iş gereklidir, ancak ölçeğe göre daha yüksek bir üretilen işi sürdürmek için yeterli değildir. Her depolama sistemi ve buna karşılık gelen Stream Analytics çıktısı, olası en iyi yazma verimini elde etme hakkında değişimlere sahiptir. Her türlü ölçeklendirme senaryosunda olduğu gibi, doğru yapılandırma kullanılarak çözülebilecek bazı zorluklar vardır. Bu bölümde, birkaç ortak çıkış için yapılandırma ele alınmaktadır ve saniye başına 1 k, 5K ve 10.000 olay alma fiyatları için örnekler sağlanmaktadır.
Aşağıdaki gözlemler, Olay Hub 'ı, Azure SQL DB 'ye veya Cosmos DB yazan temel bir JavaScript UDF 'i olan durum bilgisiz (PASSTHROUGH) sorgusuyla bir Stream Analytics işi kullanır.
Olay Hub'ı
| Alım oranı (saniye başına olay) | Akış birimleri | Çıkış kaynakları |
|---|---|---|
| 1K | 1 | 2 TU |
| 5K | 6 | 6 TU |
| 10K | 12 | 10 TU |
Olay Hub 'ı çözümü, akış BIRIMLERI (su) ve verimlilik açısından doğrusal bir şekilde ölçeklendirirken, verileri Stream Analytics çözümlemek ve veri akışı yapmak için en verimli ve performanslı bir yoldur. İşler 192 SU 'e kadar ölçeklendirilebilir ve bu da günde en fazla 200 MB/sn veya 19.000.000.000.000 olay olarak çeviri yapılabilir.
Azure SQL
| Alım oranı (saniye başına olay) | Akış birimleri | Çıkış kaynakları |
|---|---|---|
| 1K | 3 | S3 |
| 5K | 18 | P4 |
| 10K | 36 | P6 |
Azure SQL , yazmayı devralma adlı paralel olarak yazmayı destekler, ancak varsayılan olarak etkinleştirilmemiştir. Ancak, tümüyle paralel bir sorgu ile birlikte Bölümlendirmeyi etkinleştirmek, daha yüksek bir yük devretmede elde etmek için yeterli olmayabilir. SQL Write Through, veritabanı yapılandırmanıza ve tablo şemanıza önemli ölçüde bağlıdır. SQL çıkış performansı makalesi, yazma aktarım hızını en üst düzeye çıkarabileceğiniz parametreler hakkında daha fazla ayrıntı içerir. Bu çözüm, Azure SQL veritabanı 'na Azure Stream Analytics çıkışı bölümünde belirtildiği gibi, 8 bölümden daha büyük bir paralel işlem hattı olarak doğrusal şekilde ölçeklendirmez ve SQL çıktısından önce yeniden bölümlenmesi gerekebilir ( bkz.). Premium SKU 'Lar, çok sayıda dakikada bir oluşan günlük yedeklerinden gelen ek yükün yanı sıra yüksek GÇ ücretleri için de gereklidir.
Cosmos DB
| Alım oranı (saniye başına olay) | Akış birimleri | Çıkış kaynakları |
|---|---|---|
| 1K | 3 | 20K RU |
| 5K | 24 | 60K RU |
| 10K | 48 | 120K RU |
Stream Analytics çıkış Cosmos DB , Uyumluluk düzeyi 1,2altında yerel tümleştirmeyi kullanacak şekilde güncelleştirilmiştir. Uyumluluk düzeyi 1,2, önemli ölçüde daha yüksek aktarım hızı sağlar ve yeni işler için varsayılan uyumluluk düzeyi olan 1,1 ile karşılaştırıldığında RU tüketimini azaltır. Çözüm,/DeviceID üzerinde bölümlenmiş CosmosDB kapsayıcılarını kullanır ve geri kalan çözüm de aynı şekilde yapılandırılmıştır.
Azure örnekleri ölçeğinde tüm akışlar , test istemcilerinin benzetimini yapan yük tarafından beslenen giriş olarak bir olay hub 'ı kullanır. Her giriş olayı bir 1 KB JSON belgesidir. Bu, yapılandırılan Alım tarifelerinin hızını işleme oranlarına (1MB/s, 5 MB/s ve 10 GB/sn) kolayca dönüştürür. Olaylar, en fazla 1K cihaz için aşağıdaki JSON verilerini (kısaltılmış bir biçimde) gönderen bir IoT cihazının benzetimini yapar:
{
"eventId": "b81d241f-5187-40b0-ab2a-940faf9757c0",
"complexData": {
"moreData0": 51.3068118685458,
"moreData22": 45.34076957651598
},
"value": 49.02278128887753,
"deviceId": "contoso://device-id-1554",
"type": "CO2",
"createdAt": "2019-05-16T17:16:40.000003Z"
}
Not
Yapılandırmalarda kullanılan çeşitli bileşenler nedeniyle yapılandırmaların değiştirilmesi tabidir. Daha doğru bir tahmin için, örnekleri senaryonuza uyacak şekilde özelleştirin.
Performans sorunlarını belirleme
İşlem hattınızdaki performans sorunlarını belirlemek için Azure Stream Analytics işinizin ölçümler bölmesini kullanın. İşin giriş oranına sahip olup olmadığını görmek için üretilen iş ve "filigran gecikmesi" veya biriktirme listesi olayları Için giriş/çıkış olaylarını gözden geçirin. Olay Hub 'ı ölçümleri için, Kısıtlanmış istekleri bulun ve eşik birimlerini uygun şekilde ayarlayın. Cosmos DB ölçümleri için, bölüm anahtarı aralıklarınızın her bir şekilde tüketildiğinden emin olmak için üretilen Iş birimi anahtar aralığı başına en fazla ru/sn 'yi gözden geçirin. Azure SQL DB için günlük GÇ ve CPU 'yu izleyin.
Yardım alın
Daha fazla yardım için, Azure Stream Analytics Için Microsoft Q&soru sayfasınıdeneyin.