Aracılığıyla paylaş


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.
  • Kaynağınız, daha sonra birleştirilmesi gereken birden çok bölüm arasında girişi "püskürtü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 düzenleme 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.

Yeniden bölümlemeyi

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

Bölüm anahtarı kullanarak bir olay hub'ı çıkışını okuyan ve 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 işi içindeki girişi yeniden bölümle

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 aynı bölüm anahtarına ve sayıya sahip olmalıdır. Sonuç, aynı bölüm düzenine sahip bir akıştı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, her alt akışın bağımsız olarak boşaltılabilmesi için akış düzeni anahtarı ve sayısıyla eşleşmelidir. 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 kaynak atanmamışsa, sistem yalnızca işe yararsa yeniden bölümlemesi uygular.

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

İş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 bkz. Azure SQL Veritabanı için Azure Stream Analytics çıkışı.

Sonraki adımlar