Azure Stream Analytics ile işlemeyi iyileştirmek için yeniden bölümleme kullanma

Bu makalede, Azure Stream Analytics sorgunuzu tam olarak paralelleştirilmeyecek senaryolar için ölçeklendirmek için yeniden bölümlemenin nasıl kullanılacağı gösterilmektedir.

Aşağıdakiler durumunda paralelleştirmeyi kullanamayabilirsiniz:

  • Giriş akışınızın bölüm anahtarını denetlemezsiniz.
  • Kaynak, daha sonra birleştirilmesi gereken girişi birden çok bölüme dağıtır.

Verileri, Event Hubs için PartitionId gibi doğal bir giriş düzenine göre parçalanmamış bir akışta işlerken, yeniden bölümleme veya yeniden karıştırma gereklidir. Yeniden bölümleme yaptığınızda, her parça bağımsız olarak işlenebilir ve bu sayede akış işlem hattınızın ölçeğini doğrusal olarak genişletebilirsiniz.

Nasıl Yeniden Bölümlendirilir?

Girişinizi iki şekilde yeniden bölümleyebilirsiniz:

  1. Yeniden bölümleme işlemine yönelik ayrı bir Stream Analytics işi kullanma
  2. Tek bir iş kullanın ancak yeniden bölümleme işlemini özel analiz mantığınızdan önce yapın

Girişi yeniden bölümlendirecek ayrı bir Stream Analytics işi oluşturma

Girdi okuyan ve bir bölüm anahtarı kullanarak olay hub'ı çıkışına yazan bir iş oluşturabilirsiniz. Bu olay hub'ı daha sonra analiz mantığınızı uyguladığınız başka bir Stream Analytics işi için giriş görevi görebilir. İşinizde bu olay hub'ı çıkışını yapılandırırken, Stream Analytics'in verilerinizi yeniden bölümleyeceği bölüm anahtarını belirtmeniz gerekir.

-- For compat level 1.2 or higher
SELECT * 
INTO output
FROM input

--For compat level 1.1 or lower
SELECT *
INTO output
FROM input PARTITION BY PartitionId

Tek bir Stream Analytics görevi içindeki girişi yeniden bölümleştir

Ayrıca sorgunuzda ilk olarak girişi yeniden bölümleyen bir adım da ekleyebilirsiniz. Bu adım sorgunuzdaki diğer adımlar tarafından kullanılabilir. Örneğin, girdileri DeviceId temelinde yeniden bölümlemek istiyorsanız sorgunuz şu şekilde olur:

WITH RepartitionedInput AS 
( 
    SELECT * 
    FROM input PARTITION BY DeviceID
)

SELECT DeviceID, AVG(Reading) as AvgNormalReading  
INTO output
FROM RepartitionedInput  
GROUP BY DeviceId, TumblingWindow(minute, 1)  

Aşağıdaki örnek sorgu, yeniden bölümlenmiş iki veri akışını birleştirir. Yeniden bölümlenmiş iki veri akışını birleştirdiğinizde, akışların aynı bölüm anahtarına ve aynı sayıda bölüme sahip olması gerekir. Sonuç, aynı bölüm düzenine sahip bir akımdır.

WITH step1 AS 
(
    SELECT * FROM input1 
    PARTITION BY DeviceID
),
step2 AS 
(
    SELECT * FROM input2 
    PARTITION BY DeviceID
)

SELECT * INTO output 
FROM step1 PARTITION BY DeviceID 
UNION step2 PARTITION BY DeviceID

Çıkış düzeni akış bölüm anahtarıyla ve bölüm sayısıyla eşleşmelidir, böylece her alt akış bağımsız olarak temizlenebilir. Akış, boşaltmadan önce farklı bir düzen tarafından birleştirilebilir ve yeniden bölümlenebilir, ancak işlemenin genel gecikme süresini artırdığı ve kaynak kullanımını artırdığı için bu yöntemden kaçınmanız gerekir.

Yeniden bölümlemeler için Akış Birimleri

İhtiyacınız olan tam bölüm sayısını belirlemek için işinizin kaynak kullanımını deneyin ve gözlemleyin. Akış birimi (SU) sayısı, her bölüm için gereken fiziksel kaynaklara göre ayarlanmalıdır. Genel olarak, her bölüm için altı SU gereklidir. İşe yeterli kaynaklar atanmamışsa, sistem yalnızca işe fayda sağlarsa yeniden bölümlendirmeyi uygular.

SQL çıktısı için yeniden bölümlendirmeler

İşiniz çıktı için SQL veritabanı kullandığında, aktarım hızını en üst düzeye çıkarmak için en uygun bölüm sayısıyla eşleştirmek için açık yeniden bölümleme kullanın. SQL sekiz yazarla en iyi şekilde çalıştığından, akışı boşaltmadan önce sekize veya yukarı akışta başka bir yere yeniden bölümlendirmek, iş performansına fayda sağlayabilir.

Sekizden fazla giriş bölümü olduğunda, giriş bölümleme düzenini devralma uygun bir seçim olmayabilir. Çıktı yazıcılarının sayısını açıkça belirtmek için sorgunuzda INTO kullanmayı göz önünde bulundurun.

Aşağıdaki örnek, doğal olarak bölümlenmiş olmasına bakılmaksızın girişten okur ve akışı DeviceID boyutuna göre on kat yeniden bölümler ve verileri çıkışa boşaltır.

SELECT * INTO [output] 
FROM [input] 
PARTITION BY DeviceID INTO 10

Daha fazla bilgi için Azure Stream Analytics'in Azure SQL Veritabanı'na yönlendirilen çıkışı bölümüne bakın.

Sonraki adımlar