Azure Cosmos DB Spark bağlayıcısı: Aktarım hızı denetimi

UYGULANANLAR: NoSQL

Spark bağlayıcısı, Apache Spark kullanarak Azure Cosmos DB ile iletişim kurmanızı sağlar. Bu makalede aktarım hızı denetimi özelliğinin nasıl çalıştığı açıklanmaktadır. Aktarım hızı denetimini kullanmaya başlamak için GitHub'daki Spark örneklerimize göz atın.

Bu makalede Azure Cosmos DB Spark bağlayıcısında genel aktarım hızı denetim gruplarının kullanımı belgelenmektedir, ancak işlevsellik Java SDK'sında da kullanılabilir. SDK'da, tek bir istemci bağlantı örneği bağlamında istek birimi (RU) tüketimini sınırlamak için genel ve yerel aktarım hızı denetim gruplarını kullanabilirsiniz. Örneğin, bu yaklaşımı tek bir mikro hizmet içindeki farklı işlemlere veya belki de tek bir veri yükleme programına uygulayabilirsiniz. Daha fazla bilgi için bkz. Java SDK'sında aktarım hızı denetimini kullanma.

Uyarı

Aktarım hızı denetimi ağ geçidi modu için desteklenmez. Şu anda sunucusuz Azure Cosmos DB hesapları için hataya neden olan yüzde sonuçlarını tanımlamak için kullanılmaya targetThroughputThreshold çalışılıyor. Hedef aktarım hızı/RU için yalnızca kullanarak mutlak bir değer sağlayabilirsiniz spark.cosmos.throughputControl.targetThroughput.

Aktarım hızı denetimi neden önemlidir?

Aktarım hızı denetimi, bir kapsayıcıda çalışan uygulamaların performans gereksinimlerini yalıtmaya yardımcı olur. Aktarım hızı denetimi, belirli bir Spark istemcisinin kullanabileceği RU miktarını sınırlar.

çeşitli gelişmiş senaryolar istemci tarafı aktarım hızı denetiminden yararlanır:

  • Farklı işlemlerin ve görevlerin farklı öncelikleri vardır: Veri alımı veya kopyalama etkinlikleri nedeniyle normal işlemlerin kısıtlanmasını önleme gereksinimi olabilir. Bazı işlemler veya görevler gecikme süresine duyarlı değildir ve azaltmaya diğerlerinden daha dayanıklıdır.
  • Farklı kullanıcılara veya kiracılara eşitlik/yalıtım sağlama: Bir uygulamanın genellikle çok sayıda kullanıcısı vardır. Bazı kullanıcılar çok fazla istek gönderebilir ve bu da kullanılabilir tüm aktarım hızını tüketir ve bazılarının kısıtlanmış duruma düşmesine neden olur.
  • Farklı Azure Cosmos DB istemcileri arasında aktarım hızının yük dengelemesi: Bazı kullanım örneklerinde, tüm istemcilerin aktarım hızına eşit (eşit) bir paya sahip olduğundan emin olmak önemlidir.

Aktarım hızı denetimi gerektiğinde daha ayrıntılı düzeyde RU hız sınırlama özelliği sağlar.

Aktarım hızı denetimi nasıl çalışır?

Spark bağlayıcısı için aktarım hızı denetimini yapılandırmak için önce aktarım hızı denetimi meta verilerini tanımlayan bir kapsayıcı oluşturursunuz. Bölüm anahtarı ve groupId ttl etkindir. Burada Spark SQL kullanarak bu kapsayıcıyı oluşturup olarak adlandıracaksınız ThroughputControl:

    %sql
    CREATE TABLE IF NOT EXISTS cosmosCatalog.`database-v4`.ThroughputControl 
    USING cosmos.oltp
    OPTIONS(spark.cosmos.database = 'database-v4')
    TBLPROPERTIES(partitionKeyPath = '/groupId', autoScaleMaxThroughput = '4000', indexingPolicy = 'AllProperties', defaultTtlInSeconds = '-1');

Yukarıdaki örnek, otomatik ölçeklendirme ile bir kapsayıcı oluşturur. Standart sağlamayı tercih ediyorsanız değerini ile manualThroughputdeğiştirebilirsinizautoScaleMaxThroughput.

Önemli

Aktarım hızı denetimi özelliğinin çalışması için bölüm anahtarı olarak /groupId tanımlanmalıdır ve ttl etkinleştirilmelidir.

Belirli bir uygulamanın Spark yapılandırmasında, iş yükü için parametreler belirtebilirsiniz. Aşağıdaki örnek aktarım hızı denetimini olarak enabledayarlar. Örnek, aktarım hızı denetim grubu name parametresini ve targetThroughputThreshold parametresini tanımlar. Ayrıca, aktarım hızı denetim grubunun korunup korunmadığı ve container parametrelerini de tanımlarsınızdatabase:

    "spark.cosmos.throughputControl.enabled" -> "true",
    "spark.cosmos.throughputControl.name" -> "SourceContainerThroughputControl",
    "spark.cosmos.throughputControl.targetThroughputThreshold" -> "0.95", 
    "spark.cosmos.throughputControl.globalControl.database" -> "database-v4", 
    "spark.cosmos.throughputControl.globalControl.container" -> "ThroughputControl"

Yukarıdaki örnekte targetThroughputThreshold parametresi 0,95 olarak tanımlanmıştır. İstemciler kapsayıcıya ayrılan aktarım hızının yüzde 95'inden (+/- yüzde 5-10) fazlasını tükettiğinde hız sınırlama gerçekleşir (ve istekler yeniden denenir). Bu yapılandırma, aktarım hızı kapsayıcısında bir belge olarak depolanır ve bu örnek şöyle görünür:

    {
        "id": "ZGF0YWJhc2UtdjQvY3VzdG9tZXIvU291cmNlQ29udGFpbmVyVGhyb3VnaHB1dENvbnRyb2w.info",
        "groupId": "database-v4/customer/SourceContainerThroughputControl.config",
        "targetThroughput": "",
        "targetThroughputThreshold": "0.95",
        "isDefault": true,
        "_rid": "EHcYAPolTiABAAAAAAAAAA==",
        "_self": "dbs/EHcYAA==/colls/EHcYAPolTiA=/docs/EHcYAPolTiABAAAAAAAAAA==/",
        "_etag": "\"2101ea83-0000-1100-0000-627503dd0000\"",
        "_attachments": "attachments/",
        "_ts": 1651835869
    }

Aktarım hızı denetimi her işlemin RU ön hesaplamasını yapmaz. Bunun yerine, yanıt üst bilgisine göre işlemden sonraki RU kullanımlarını izler. Bu nedenle, aktarım hızı denetimi bir tahmini temel alır ve grup için belirli bir zamanda kullanılabilir aktarım hızı miktarını garanti etmez.

Bu nedenle, yapılandırılan RU tek bir işlemin tümünü kullanabilecek kadar düşükse, aktarım hızı denetimi RU'nun yapılandırılan sınırı aşmasını önleyemez. Aktarım hızı denetimi, yapılandırılan sınır, belirli bir denetim grubundaki bir istemcinin yürütebileceği tek bir işlemden daha yüksek olduğunda en iyi şekilde çalışır.

Sorgu veya değişiklik akışı aracılığıyla okurken, içindeki sayfa boyutunu spark.cosmos.read.maxItemCount (varsayılan 1000) mütevazı bir miktar olacak şekilde yapılandırmanız gerekir. Bu şekilde, istemci aktarım hızı denetimi daha yüksek sıklıkta yeniden hesaplanabilir ve belirli bir zamanda daha doğru yansıtılabilir. Toplu kullanarak bir yazma işi için aktarım hızı denetimi kullandığınızda, aktarım hızı denetiminin mümkün olan en erken şekilde başlamasına izin vermek için tek bir istekte yürütülen belge sayısı azaltma hızına göre otomatik olarak ayarlanır.

Uyarı

targetThroughputThreshold parametresi sabittir. Hedef aktarım hızı eşik değerini değiştirirseniz yeni bir aktarım hızı denetim grubu oluşturulur. (4.10.0 veya sonraki bir sürümü kullanıyorsanız, aynı ada sahip olabilir.) Tümünün yeni eşiği hemen kullandığından emin olmak istiyorsanız, grubu kullanan tüm Spark işlerini yeniden başlatmanız gerekir. Aksi takdirde, bir sonraki yeniden başlatmadan sonra yeni eşiği alır.

Aktarım hızı denetim grubunu kullanan her Spark istemcisi için kapsayıcıda ThroughputControl birkaç saniyelik bir ttl kayıt oluşturulur. Sonuç olarak, bir Spark istemcisi artık etkin bir şekilde çalışmıyorsa belgeler hızla kaybolur. Bir örnek aşağıda verilmiştir:

    {
        "id": "Zhjdieidjojdook3osk3okso3ksp3ospojsp92939j3299p3oj93pjp93jsps939pkp9ks39kp9339skp",
        "groupId": "database-v4/customer/SourceContainerThroughputControl.config",
        "_etag": "\"1782728-w98999w-ww9998w9-99990000\"",
        "ttl": 10,
        "initializeTime": "2022-06-26T02:24:40.054Z",
        "loadFactor": 0.97636377638898,
        "allocatedThroughput": 484.89444487847,
        "_rid": "EHcYAPolTiABAAAAAAAAAA==",
        "_self": "dbs/EHcYAA==/colls/EHcYAPolTiA=/docs/EHcYAPolTiABAAAAAAAAAA==/",
        "_etag": "\"2101ea83-0000-1100-0000-627503dd0000\"",
        "_attachments": "attachments/",
        "_ts": 1651835869
    }

Her istemci kaydında loadFactor özniteliği, aktarım hızı denetim grubundaki diğer istemcilere göre belirli istemci üzerindeki yükü temsil eder. özniteliği, allocatedThroughput şu anda bu istemciye kaç RU ayrıldığını gösterir. Spark bağlayıcısı, her istemci için ayrılmış aktarım hızını yüküne göre ayarlar. Bu şekilde her istemci, yüküyle orantılı olan kullanılabilir aktarım hızının bir payını alır. Tüm istemciler birlikte ait oldukları aktarım hızı denetim grubu için ayrılan toplamdan fazlasını kullanmaz.

  • Bkz . GitHub'da Spark örnekleri.
  • NoSQL için API için Azure Cosmos DB Spark 3 OLTP bağlayıcısı ile verileri yönetmeyi öğrenin.
  • Apache Spark hakkında daha fazla bilgi edinin.