Düzenle

Aracılığıyla paylaş


Azure'da Apache NiFi

Azure Application Gateway
Azure Log Analytics
Azure Virtual Machines
Azure Virtual Network
Azure Virtual Machine Scale Sets

Dikkat

Bu makale, Kullanım Süresi Sonu (EOL) olan bir Linux dağıtımı olan CentOS'a başvurur. Lütfen kullanımınızı göz önünde bulundurun ve uygun şekilde planlayın. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.

Bu örnek senaryoda Azure'da Apache NiFi'nin nasıl çalıştırılacakları gösterilmektedir. NiFi, verileri işlemek ve dağıtmak için bir sistem sağlar.

Apache®, Apache NiFi® ve NiFi®, Apache Software Foundation'ın Birleşik Devletler ve/veya diğer ülkelerdeki kayıtlı ticari markaları veya ticari markalarıdır. Bu işaretlerin kullanılması Apache Software Foundation tarafından onaylanmamaktadır.

Mimari

Apache NiFi ve Apache ZooKeeper kullanan bir Azure çözümü aracılığıyla otomatik veri akışını gösteren mimari diyagramı.

Bu mimarinin bir Visio dosyasını indirin.

İş Akışı

  • NiFi uygulaması, NiFi küme düğümlerindeki VM'lerde çalışır. VM'ler, yapılandırmanın kullanılabilirlik alanları arasında dağıttığı bir sanal makine ölçek kümesindedir.

  • Apache ZooKeeper, ayrı bir kümedeki VM'lerde çalışır. NiFi şu amaçlar için ZooKeeper kümesini kullanır:

    • Küme koordinatör düğümü seçmek için
    • Veri akışını koordine etmek için
  • Azure Uygulaması lication Gateway, NiFi düğümlerinde çalışan kullanıcı arabirimi için katman 7 yük dengelemesi sağlar.

  • İzleme ve Log Analytics özelliği NiFi sisteminden telemetri toplar, analiz eder ve üzerinde işlem gösterir. Telemetri niFi sistem günlüklerini, sistem durumu ölçümlerini ve performans ölçümlerini içerir.

  • Azure Key Vault, NiFi kümesi için sertifikaları ve anahtarları güvenli bir şekilde depolar.

  • Microsoft Entra ID çoklu oturum açma (SSO) ve çok faktörlü kimlik doğrulaması sağlar.

Bileşenler

  • NiFi , verileri işlemek ve dağıtmak için bir sistem sağlar.
  • ZooKeeper , dağıtılmış sistemleri yöneten açık kaynak bir sunucudur.
  • Sanal Makineler bir hizmet olarak altyapı (IaaS) teklifidir. İsteğe bağlı, ölçeklenebilir bilgi işlem kaynaklarını dağıtmak için Sanal Makineler kullanabilirsiniz. Sanal Makineler sanallaştırma esnekliği sağlar ancak fiziksel donanımın bakım taleplerini ortadan kaldırır.
  • Azure Sanal Makine Ölçek Kümeleri bir grup yük dengeli VM'yi yönetmek için bir yol sağlar. Bir kümedeki VM örneklerinin sayısı talebe veya tanımlı bir zamanlamaya yanıt olarak otomatik olarak artabilir veya düşebilir.
  • Kullanılabilirlik alanları , bir Azure bölgesi içindeki benzersiz fiziksel konumlardır. Bu yüksek kullanılabilirlik teklifleri, uygulamaları ve verileri veri merkezi hatalarına karşı korur.
  • Application Gateway , web uygulamalarına yönelik trafiği yöneten bir yük dengeleyicidir.
  • İzleyici , ortamlar ve Azure kaynaklarıyla ilgili verileri toplar ve analiz eder. Bu veriler, performans ölçümleri ve etkinlik günlükleri gibi uygulama telemetrisini içerir. Daha fazla bilgi için bu makalenin devamında dikkat edilmesi gerekenleri izleme konusuna bakın.
  • Log Analytics , günlük verilerini izleme konusunda sorgular çalıştıran bir Azure portalı aracıdır. Log Analytics ayrıca sorgu sonuçlarını grafiklendirmeye ve istatistiksel olarak çözümlemeye yönelik özellikler de sağlar.
  • Azure DevOps Services , kodlama projelerini ve dağıtımlarını yönetmek için hizmetler, araçlar ve ortamlar sağlar.
  • Key Vault api anahtarları, parolalar, sertifikalar ve şifreleme anahtarları gibi bir sistemin gizli dizilerine erişimi güvenli bir şekilde depolar ve denetler.
  • Microsoft Entra Id , Azure'a ve diğer bulut uygulamalarına erişimi denetleen bulut tabanlı bir kimlik hizmetidir.

Alternatifler

Senaryo ayrıntıları

Bu senaryoda NiFi, ölçek kümesindeki Azure Sanal Makineler genelinde kümelenmiş bir yapılandırmada çalışır. Ancak bu makalenin önerilerinin çoğu, NiFi'yi tek bir sanal makinede (VM) tek örnek modunda çalıştıran senaryolar için de geçerlidir. Bu makaledeki en iyi yöntemler ölçeklenebilir, yüksek kullanılabilirlik ve güvenli dağıtım gösterir.

Olası kullanım örnekleri

NiFi, verileri taşımak ve veri akışını yönetmek için iyi çalışır:

  • Ayrılmış sistemleri buluta bağlama
  • Azure Depolama ve diğer veri depolarına veri taşıma
  • Buluttan buluta ve hibrit bulut uygulamalarını Azure IoT, Azure Stack ve Azure Kubernetes Service (AKS) ile tümleştirme

Sonuç olarak, bu çözüm birçok alan için geçerlidir:

  • Modern veri ambarları (MDW) yapılandırılmış ve yapılandırılmamış verileri büyük ölçekte bir araya getirir. Çeşitli kaynaklardan, havuzlardan ve biçimlerden veri toplar ve depolar. NiFi, aşağıdaki nedenlerle Azure tabanlı MDW'lere veri alma konusunda üstünlük sağlar:

    • Verileri okumak, yazmak ve işlemek için 200'den fazla işlemci kullanılabilir.
    • Sistem Azure Blob Depolama, Azure Data Lake Storage, Azure Event Hubs, Azure Kuyruk Depolama, Azure Cosmos DB ve Azure Synapse Analytics gibi Depolama hizmetlerini destekler.
    • Güçlü veri başarısı özellikleri, uyumlu çözümlerin uygulanmasını mümkün hale getirir. Azure İzleyici'nin Log Analytics özelliğinde veri başarısı yakalama hakkında bilgi için bu makalenin devamında yer alan Raporlama konuları bölümüne bakın.
  • NiFi, küçük ayak izi olan cihazlarda tek başına çalışabilir. Böyle durumlarda NiFi uç verileri işlemeyi ve bu verileri buluttaki daha büyük NiFi örneklerine veya kümelerine taşımayı mümkün kılar. NiFi, hareket halindeki uç verileri filtrelemeye, dönüştürmeye ve önceliklendirmeye yardımcı olarak güvenilir ve verimli veri akışları sağlar.

  • Endüstriyel IoT (IIoT) çözümleri, uçtan veri merkezine veri akışını yönetir. Bu akış, endüstriyel kontrol sistemlerinden ve ekipmanlarından veri alımıyla başlar. Veriler daha sonra veri yönetimi çözümlerine ve MDW'lere taşınır. NiFi, veri alımı ve hareket için uygun hale getiren özellikler sunar:

    • Edge veri işleme işlevi
    • IoT ağ geçitlerinin ve cihazların kullandığı protokoller için destek
    • Event Hubs ve Depolama hizmetleriyle tümleştirme

    Tahmine dayalı bakım ve tedarik zinciri yönetimi alanlarındaki IoT uygulamaları bu işlevi kullanabilir.

Öneriler

Bu çözümü kullanırken aşağıdaki noktaları göz önünde bulundurun:

Bu çözümü Azure'da çalıştırdığınızda NiFi'nin 1.13.2+ sürümünü kullanmanızı öneririz. Diğer sürümleri çalıştırabilirsiniz, ancak bu sürümler bu kılavuzdakilerden farklı yapılandırmalar gerektirebilir.

Azure VM'lerine NiFi yüklemek için NiFi indirmeleri sayfasından kolaylık ikili dosyalarını indirmek en iyisidir. kaynak kodundan ikili dosyaları da oluşturabilirsiniz.

Bu örnek iş yükü için ZooKeeper'ın 3.5.5 ve üzeri veya 3.6.x sürümlerini kullanmanızı öneririz.

Resmi kolaylık ikili dosyalarını veya kaynak kodunu kullanarak Azure VM'lerine ZooKeeper yükleyebilirsiniz. Her ikisi de Apache ZooKeeper sürümleri sayfasında bulunur.

Dikkat edilmesi gereken noktalar

Bu önemli noktalar, bir iş yükünün kalitesini artırmak için kullanılabilecek bir dizi yol gösteren ilke olan Azure İyi Tasarlanmış Çerçeve'nin yapı taşlarını uygular. Daha fazla bilgi için bkz . Microsoft Azure İyi Tasarlanmış Çerçeve.

NiFi'yi yapılandırma hakkında bilgi için bkz . Apache NiFi Sistem Yöneticisi Kılavuzu. Ayrıca, bu çözümü uygularken bu noktaları göz önünde bulundurun.

Maliyet iyileştirme

Maliyet iyileştirmesi, gereksiz giderleri azaltmanın ve operasyonel verimlilikleri iyileştirmenin yollarını aramaktır. Daha fazla bilgi için bkz . Maliyet iyileştirme sütununa genel bakış.

VM ile ilgili dikkat edilmesi gereken konular

Aşağıdaki bölümlerde NiFi VM'lerinin nasıl yapılandırıldığında ayrıntılı bir ana hat sağlanır:

VM boyutu

Bu tabloda, başlangıç için önerilen VM boyutları listelenmiştir. Çoğu genel amaçlı veri akışı için Standard_D16s_v3 en iyisidir. Ancak NiFi'deki her veri akışının farklı gereksinimleri vardır. Akışınızı test edin ve akışın gerçek gereksinimlerine göre gerektiği şekilde yeniden boyutlandırın.

Ağ performansını artırmak için VM'lerde hızlandırılmış ağı etkinleştirmeyi göz önünde bulundurun. Daha fazla bilgi için bkz . Azure sanal makine ölçek kümeleri için ağ oluşturma.

VM boyutu Sanal işlemci GB cinsinden bellek Mb/sn başına saniyede G/Ç işlemlerinde (IOPS) en fazla kazınmamış veri diski aktarım hızı* En fazla ağ arabirimi (NIC) / Beklenen ağ bant genişliği (Mb/sn)
Standard_D8s_v3 8 32 12,800/192 4/4,000
Standard_D16s_v3** 16 64 25,600/384 8/8,000
Standard_D32s_v3 32 128 51,200/768 8/16,000
Standard_M16m 16 437.5 10,000/250 8/4,000

* NiFi düğümlerinde kullandığınız tüm veri diskleri için veri diski yazma önbelleğini devre dışı bırakın.

** Genel amaçlı veri akışlarının çoğu için bu SKU'yu öneririz. Benzer vCPU ve bellek yapılandırmalarına sahip Azure VM SKU'ları da yeterli olmalıdır.

VM işletim sistemi (işletim sistemi)

Aşağıdaki konuk işletim sistemlerinden birinde Azure'da NiFi çalıştırmanızı öneririz:

  • Ubuntu 18.04 LTS veya üzeri
  • CentOS 7.9

Veri akışınızın belirli gereksinimlerini karşılamak için aşağıdakiler de dahil olmak üzere çeşitli işletim sistemi düzeyinde ayarların ayarlanması önemlidir:

  • En fazla çatallanmış işlem.
  • En fazla dosya tutamaçları.
  • Erişim zamanı, atime.

İşletim sistemini beklenen kullanım örneğine uyacak şekilde ayarladıktan sonra, ayarlanmış görüntülerin neslini koordine etmek için Azure VM Görüntü Oluşturucusu'nu kullanın. NiFi'ye özgü yönergeler için Apache NiFi Sistem Yöneticisi Kılavuzu'ndaki Yapılandırma en iyi yöntemleri bölümüne bakın.

Depolama

Çeşitli NiFi depolarını işletim sistemi diskinde değil veri disklerinde depolamanın üç ana nedeni vardır:

  • Akışlar genellikle tek bir diskin karşılayabildiği yüksek disk aktarım hızı gereksinimlerine sahiptir.
  • NiFi disk işlemlerini işletim sistemi disk işlemlerinden ayırmak en iyisidir.
  • Depolar geçici depolamada olmamalıdır.

Aşağıdaki bölümlerde veri disklerini yapılandırma yönergeleri özetlenmiştir. Bu yönergeler Azure'a özeldir. Depoları yapılandırma hakkında daha fazla bilgi için Apache NiFi Sistem Yöneticisi Kılavuzu'ndaki Durum Yönetimi bölümüne bakın.

Veri diski türü ve boyutu

NiFi için veri disklerini yapılandırırken şu faktörleri göz önünde bulundurun:

  • Disk türü
  • Disk boyutu
  • Toplam disk sayısı

Not

Disk türleri, boyutlandırma ve fiyatlandırma hakkında güncel bilgiler için bkz . Azure yönetilen disklerine giriş.

Aşağıdaki tabloda, şu anda Azure'da kullanılabilen yönetilen disk türleri gösterilmektedir. NiFi'i bu disk türlerinden herhangi biriyle kullanabilirsiniz. Ancak yüksek aktarım hızına sahip veri akışları için Premium SSD'yi öneririz.

Ultra Disk (NVM Express (NVMe)) Premium SSD Standart SSD Standart HDD
Disk türü SSD SSD SSD HDD
En büyük disk boyutu 65.536 GB 32.767 GB 32.767 GB 32.767 GB
En yüksek işleme hızı 2.000 MiB/sn 900 MiB/sn 750 MiB/sn 500 MiB/sn
Maks. IOPS 160.000 20.000 6.000 2.000

Veri akışının aktarım hızını artırmak için en az üç veri diski kullanın. Disklerdeki depoları yapılandırmaya yönelik en iyi yöntemler için bu makalenin devamında yer alan Depo yapılandırması bölümüne bakın.

Aşağıdaki tabloda, her disk boyutu ve türü için uygun boyut ve aktarım hızı numaraları listelenir.

Standart HDD S15 Standart HDD S20 Standart HDD S30 Standart SSD S15 Standart SSD S20 Standart SSD S30 Premium SSD P15 Premium SSD P20 Premium SSD P30
GB cinsinden disk boyutu Kategori 256 512 1,024 Kategori 256 512 1,024 Kategori 256 512 1,024
Disk başına IOPS En fazla 500 En fazla 500 En fazla 500 En fazla 500 En fazla 500 En fazla 500 1.100 2.300 5.000
Disk başına aktarım hızı 60 MBps'ye kadar 60 MBps'ye kadar 60 MBps'ye kadar 60 MBps'ye kadar 60 MBps'ye kadar 60 MBps'ye kadar 125 MBps 150 MBps 200 MBps

Sisteminiz VM sınırlarına ulaştığında, daha fazla disk eklemek aktarım hızını artırmayabilir:

  • IOPS ve aktarım hızı sınırları diskin boyutuna bağlıdır.
  • Seçtiğiniz VM boyutu, vm için IOPS ve aktarım hızı sınırlarını tüm veri disklerine yerleştirir.

VM düzeyinde disk aktarım hızı sınırları için bkz . Azure'da Linux sanal makineleri için boyutlar.

VM disk önbelleğe alma

Azure VM'lerinde Konak Önbelleğe Alma özelliği disk yazma önbelleğini yönetir. Depolar için kullandığınız veri disklerinde aktarım hızını artırmak için, Ana Bilgisayar Önbelleği'ni Noneolarak ayarlayarak disk yazma önbelleğini kapatın.

Depo yapılandırması

NiFi için en iyi uygulama yönergeleri, bu depoların her biri için ayrı bir disk veya disk kullanmaktır:

  • Content
  • FlowFile
  • Köken

Bu yaklaşım için en az üç disk gerekir.

NiFi ayrıca uygulama düzeyinde şeritlemeyi de destekler. Bu işlev, veri depolarının boyutunu veya performansını artırır.

Aşağıdaki alıntı yapılandırma dosyasındandır nifi.properties . Bu yapılandırma, depoları VM'lere bağlı yönetilen diskler arasında bölümlere ayırır ve ayırır:

nifi.provenance.repository.directory.stripe1=/mnt/disk1/ provenance_repository
nifi.provenance.repository.directory.stripe2=/mnt/disk2/ provenance_repository
nifi.provenance.repository.directory.stripe3=/mnt/disk3/ provenance_repository
nifi.content.repository.directory.stripe1=/mnt/disk4/ content_repository
nifi.content.repository.directory.stripe2=/mnt/disk5/ content_repository
nifi.content.repository.directory.stripe3=/mnt/disk6/ content_repository
nifi.flowfile.repository.directory=/mnt/disk7/ flowfile_repository

Yüksek performanslı depolama için tasarlama hakkında daha fazla bilgi için bkz . Azure premium depolama: yüksek performans için tasarım.

Raporlama

NiFi, Log Analytics özelliği için bir provenance raporlama görevi içerir.

Bu raporlama görevini, provenance olaylarını uygun maliyetli, dayanıklı uzun vadeli depolama alanına boşaltmak için kullanabilirsiniz. Log Analytics özelliği, olayları tek tek görüntülemek ve grafını oluşturmak için bir sorgu arabirimi sağlar. Bu sorgular hakkında daha fazla bilgi için bu makalenin devamında yer alan Log Analytics sorguları bölümüne bakın.

Bu görevi geçici, bellek içi provenans depolamasıyla da kullanabilirsiniz. Birçok senaryoda aktarım hızı artışı elde edebilirsiniz. Ancak olay verilerini korumanız gerekiyorsa bu yaklaşım risklidir. Geçici depolamanın, kanıtlanmış olaylar için dayanıklılık gereksinimlerinizi karşıladığından emin olun. Daha fazla bilgi için Apache NiFi Sistem Yöneticisi Kılavuzu'ndaki Provenance Deposu'na bakın.

Bu işlemi kullanmadan önce Azure aboneliğinizde bir log analytics çalışma alanı oluşturun. Çalışma alanını iş yükünüzle aynı bölgede ayarlamak en iyisidir.

Provenance raporlama görevini yapılandırmak için:

  1. NiFi'de denetleyici ayarlarını açın.
  2. Raporlama görevleri menüsünü seçin.
  3. Yeni raporlama görevi oluştur'u seçin.
  4. Azure Log Analytics Raporlama Görevi'ne tıklayın.

Aşağıdaki ekran görüntüsünde bu raporlama görevinin özellikler menüsü gösterilmektedir:

NiFi Raporlama Görevini Yapılandır penceresinin ekran görüntüsü. Özellikler menüsü görünür. Log Analytics ayarlarının değerlerini listeler.

İki özellik gereklidir:

  • Log Analytics çalışma alanı kimliği
  • Log Analytics çalışma alanı anahtarı

Log Analytics çalışma alanınıza giderek bu değerleri Azure portalında bulabilirsiniz.

Sistemin gönderdiği provenance olaylarını özelleştirmek ve filtrelemek için başka seçenekler de mevcuttur.

Güvenlik

Güvenlik, kasıtlı saldırılara ve değerli verilerinizin ve sistemlerinizin kötüye kullanılmasına karşı güvence sağlar. Daha fazla bilgi için bkz . Güvenlik sütununa genel bakış.

NiFi'nin güvenliğini kimlik doğrulaması ve yetkilendirme açısından sağlayabilirsiniz. NiFi'nin güvenliğini şu şekilde tüm ağ iletişimleri için de sağlayabilirsiniz:

  • Küme içinde.
  • Küme ile ZooKeeper arasında.

Aşağıdaki seçenekleri açma yönergeleri için Apache NiFi Yöneticileri Kılavuzu'na bakın:

  • Kerberos
  • Hafif Dizin Erişim Protokolü (LDAP)
  • Sertifika tabanlı kimlik doğrulaması ve yetkilendirme
  • Küme iletişimleri için iki yönlü Güvenli Yuva Katmanı (SSL)

ZooKeeper güvenli istemci erişimini açarsanız, yapılandırma dosyasına ilgili özellikleri ekleyerek NiFi'yi bootstrap.conf yapılandırın. Aşağıdaki yapılandırma girdileri bir örnek sağlar:

java.arg.18=-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
java.arg.19=-Dzookeeper.client.secure=true
java.arg.20=-Dzookeeper.ssl.keyStore.location=/path/to/keystore.jks
java.arg.21=-Dzookeeper.ssl.keyStore.password=[KEYSTORE PASSWORD]
java.arg.22=-Dzookeeper.ssl.trustStore.location=/path/to/truststore.jks
java.arg.23=-Dzookeeper.ssl.trustStore.password=[TRUSTSTORE PASSWORD]

Genel öneriler için bkz . Linux güvenlik temeli.

Ağ güvenliği

Bu çözümü uygularken ağ güvenliğiyle ilgili aşağıdaki noktaları göz önünde bulundurun:

Ağ güvenlik grupları

Azure'da ağ trafiğini kısıtlamak için ağ güvenlik gruplarını kullanabilirsiniz.

Yönetim görevleri için NiFi kümesine bağlanmak için bir sıçrama kutusu öneririz. Tam zamanında (JIT) erişim veya Azure Bastion ile bu güvenlik sağlamlaştırılmış VM'leri kullanın. Sıçrama kutusuna veya Azure Bastion'a erişim izni verme yönteminizi denetlemek için ağ güvenlik grupları ayarlayın. Mimarinin çeşitli alt ağlarında ağ güvenlik gruplarını rastgele kullanarak ağ yalıtımı ve denetimi elde edebilirsiniz.

Aşağıdaki ekran görüntüsünde tipik bir sanal ağdaki bileşenler gösterilmektedir. Sıçrama kutusu, sanal makine ölçek kümesi ve ZooKeeper VM'leri için ortak bir alt ağ içerir. Bu basitleştirilmiş ağ topolojisi, bileşenleri tek bir alt ağda gruplandırıyor. Kuruluşunuzun görev ayrımı ve ağ tasarımı yönergelerini izleyin.

Bir sanal ağın bileşenlerinin cihazlarını, türlerini ve alt ağlarını listeleyen bir tablonun ekran görüntüsü.

Giden İnternet erişimiyle ilgili dikkat edilmesi gerekenler

Azure'da NiFi'nin çalışması için genel İnternet erişimi gerekmez. Veri akışının veri almak için İnternet erişimine ihtiyacı yoksa, giden İnternet erişimini devre dışı bırakmak için aşağıdaki adımları izleyerek kümenin güvenliğini geliştirin:

  1. Sanal ağda ek bir ağ güvenlik grubu kuralı oluşturun.

  2. Şu ayarları kullanın:

    • Kaynak: Any
    • Hedef: Internet
    • Eylem: Deny

Öncelik, Ad, Bağlantı Noktası, Protokol, Kaynak, Hedef ve Eylem gibi giden güvenlik kuralı ayarlarının değerlerini gösteren ekran görüntüsü.

Bu kural uygulandığında, sanal ağda özel bir uç nokta yapılandırdığınızda veri akışından bazı Azure hizmetlerine erişmeye devam edebilirsiniz. Bu amaçla Azure Özel Bağlantı kullanın. Bu hizmet, trafiğinizin Microsoft omurga ağında seyahat edebilmesi için başka bir dış ağ erişimi gerektirmeyen bir yol sağlar. NiFi şu anda Blob Depolama ve Data Lake Storage işlemcileri için Özel Bağlantı destekler. Özel ağınızda bir Ağ Zaman Protokolü (NTP) sunucusu yoksa, NTP'ye giden erişime izin verin. Ayrıntılı bilgi için bkz . Azure'da Linux VM'leri için zaman eşitleme.

Veri koruması

NiFi'yi güvenli olmayan, kablo şifrelemesi, kimlik ve erişim yönetimi (IAM) veya veri şifrelemesi olmadan çalıştırmak mümkündür. Ancak en iyisi üretim ve genel bulut dağıtımlarının güvenliğini şu yollarla sağlamaktır:

  • Aktarım Katmanı Güvenliği (TLS) ile iletişimi şifreleme
  • Desteklenen bir kimlik doğrulama ve yetkilendirme mekanizması kullanma
  • Bekleyen verileri şifreleme

Azure Depolama, sunucu tarafı saydam veri şifrelemesi sağlar. Ancak 1.13.2 sürümünden itibaren NiFi, varsayılan olarak kablo şifreleme veya IAM yapılandırmaz. Bu davranış, gelecek sürümlerde değişebilir.

Aşağıdaki bölümlerde dağıtımların güvenliğini sağlama adımları gösterilmektedir:

  • TLS ile kablo şifrelemeyi etkinleştirme
  • Sertifikaları veya Microsoft Entra Kimliğini temel alan kimlik doğrulamasını yapılandırma
  • Azure'da şifrelenmiş depolamayı yönetme
Disk şifrelemesi

Güvenliği geliştirmek için Azure disk şifrelemesini kullanın. Ayrıntılı bir yordam için bkz . Azure CLI ile sanal makine ölçek kümesindeki işletim sistemini ve bağlı veri disklerini şifreleme. Bu belgede kendi şifreleme anahtarınızı sağlamaya yönelik yönergeler de bulunur. Aşağıdaki adımlarda, çoğu dağıtımda çalışan NiFi için temel bir örnek özetlenmiştir:

  1. Mevcut bir Key Vault örneğinde disk şifrelemesini açmak için aşağıdaki Azure CLI komutunu kullanın:

    az keyvault create --resource-group myResourceGroup --name myKeyVaultName --enabled-for-disk-encryption
    
  2. Aşağıdaki komutla sanal makine ölçek kümesi veri disklerinin şifrelenmesini açın:

    az vmss encryption enable --resource-group myResourceGroup --name myScaleSet --disk-encryption-keyvault myKeyVaultID --volume-type DATA
    
  3. İsteğe bağlı olarak bir anahtar şifreleme anahtarı (KEK) kullanabilirsiniz. KEK ile şifrelemek için aşağıdaki Azure CLI komutunu kullanın:

    az vmss encryption enable --resource-group myResourceGroup --name  myScaleSet  \
    --disk-encryption-keyvault myKeyVaultID \
    --key-encryption-keyvault myKeyVaultID \
    --key-encryption-key https://<mykeyvaultname>.vault.azure.net/keys/myKey/<version> \
    --volume-type DATA
    
    

Not

Sanal makine ölçek kümenizi el ile güncelleştirme modu için yapılandırdıysanız komutunu çalıştırın update-instances . Key Vault'ta depoladığınız şifreleme anahtarının sürümünü ekleyin.

Aktarım sırasında şifreleme

NiFi, aktarım sırasında şifreleme için TLS 1.2'i destekler. Bu protokol, kullanıcı arabirimine kullanıcı erişimi için koruma sağlar. Kümeler ile protokol, NiFi düğümleri arasındaki iletişimi korur. ZooKeeper ile iletişimi de koruyabilir. TLS'yi etkinleştirdiğinizde NiFi, aşağıdakiler için karşılıklı kimlik doğrulaması için karşılıklı TLS (mTLS) kullanır:

  • Bu kimlik doğrulama türünü yapılandırdıysanız sertifika tabanlı istemci kimlik doğrulaması.
  • Bütün topluluk içi iletişimler.

TLS'yi etkinleştirmek için aşağıdaki adımları izleyin:

  1. İstemci-sunucu ve küme içi iletişim ve kimlik doğrulaması için bir anahtar deposu ve güven deposu oluşturun.

  2. öğesini yapılandırın $NIFI_HOME/conf/nifi.properties. Aşağıdaki değerleri ayarlayın:

    • Konak adları
    • Bağlantı Noktaları
    • Keystore özellikleri
    • Truststore özellikleri
    • Varsa Küme ve ZooKeeper güvenlik özellikleri
  3. içinde $NIFI_HOME/conf/authorizers.xmlkimlik doğrulamayı, genellikle sertifika tabanlı kimlik doğrulamasına sahip ilk kullanıcıyla veya başka bir seçenekle yapılandırın.

  4. İsteğe bağlı olarak NiFi ile ara sunucular, yük dengeleyiciler veya dış uç noktalar arasında mTLS ve ara sunucu okuma ilkesi yapılandırın.

Tam bir izlenecek yol için Apache projesi belgelerindeki NiFi'yi TLS ile güvenli hale getirme bölümüne bakın.

Not

Sürüm 1.13.2 itibariyle:

  • NiFi, TLS'yi varsayılan olarak etkinleştirmez.
  • TLS özellikli NiFi örnekleri için anonim ve tek kullanıcı erişimi için kullanıma hazır destek yoktur.

Aktarım sırasında şifreleme için TLS'yi etkinleştirmek için, içinde $NIFI_HOME/conf/authorizers.xmlkimlik doğrulaması ve yetkilendirme için bir kullanıcı grubu ve ilke sağlayıcısı yapılandırın. Daha fazla bilgi için bu makalenin devamında yer alan Kimlik ve erişim denetimi bölümüne bakın.

Sertifikalar, anahtarlar ve anahtar depoları

TLS'yi desteklemek için sertifikalar oluşturun, bunları Java KeyStore ve TrustStore'da depolayın ve bir NiFi kümesine dağıtın. Sertifikalar için iki genel seçenek vardır:

  • Otomatik olarak imzalanan sertifikalar
  • Sertifikalı yetkililerin (CA' lar) imzalayan sertifikalar

CA imzalı sertifikalarla, kümedeki düğümler için sertifika oluşturmak üzere ara CA kullanmak en iyisidir.

KeyStore ve TrustStore, Java platformundaki anahtar ve sertifika kapsayıcılarıdır. KeyStore, kümedeki bir düğümün özel anahtarını ve sertifikasını depolar. TrustStore aşağıdaki sertifika türlerinden birini depolar:

  • KeyStore'da otomatik olarak imzalanan sertifikalar için tüm güvenilen sertifikalar
  • KeyStore'da CA ile imzalanan sertifikalar için CA'dan sertifika

Bir kapsayıcı seçtiğinizde NiFi kümenizin ölçeklenebilirliğini göz önünde bulundurun. Örneğin, gelecekte bir kümedeki düğüm sayısını artırmak veya azaltmak isteyebilirsiniz. KeyStore'da CA imzalı sertifikalar ve bu durumda TrustStore'daki bir CA'dan bir veya daha fazla sertifika seçin. Bu seçenekle, kümenin mevcut düğümlerinde mevcut TrustStore'yu güncelleştirmeye gerek yoktur. Mevcut bir TrustStore, şu düğüm türlerindeki sertifikalara güvenir ve bunları kabul eder:

  • Kümeye eklediğiniz düğümler
  • Kümedeki diğer düğümlerin yerini alan düğümler
NiFi yapılandırması

NiFi için TLS'yi etkinleştirmek için bu tablodaki özellikleri yapılandırmak için kullanın $NIFI_HOME/conf/nifi.properties . Aşağıdaki özelliklerin NiFi'ye erişmek için kullandığınız konak adını içerdiğinden emin olun:

  • nifi.web.https.host veya nifi.web.proxy.host
  • Konak sertifikasının belirlenen adı veya konu alternatif adları

Aksi takdirde bir konak adı doğrulama hatası veya HTTP ANA BILGISAYAR üst bilgisi doğrulama hatası oluşabilir ve erişiminiz reddedebilir.

Özellik adı Açıklama Örnek değerler
nifi.web.https.host Kullanıcı arabirimi ve REST API için kullanılacak ana bilgisayar adı veya IP adresi. Bu değer dahili olarak çözümlenebilir olmalıdır. Herkese açık bir ad kullanmamanızı öneririz. nifi.internal.cloudapp.net
nifi.web.https.port Kullanıcı arabirimi ve REST API için kullanılacak HTTPS bağlantı noktası. 9443 (varsayılan)
nifi.web.proxy.host İstemcilerin kullanıcı arabirimine ve REST API'ye erişmek için kullandığı alternatif konak adlarının virgülle ayrılmış listesi. Bu liste genellikle sunucu sertifikasında konu alternatif adı (SAN) olarak belirtilen tüm konak adlarını içerir. Liste, yük dengeleyici, ara sunucu veya Kubernetes giriş denetleyicisinin kullandığı herhangi bir konak adını ve bağlantı noktasını da içerebilir. 40.67.218.235, 40.67.218.235:443, nifi.westus2.cloudapp.com, nifi.westus2.cloudapp.com:443
nifi.security.keystore Sertifikanın özel anahtarını içeren bir JKS veya PKCS12 anahtar deposunun yolu. ./conf/keystore.jks
nifi.security.keystoreType Anahtar deposu türü. JKS veya PKCS12
nifi.security.keystorePasswd Anahtar deposu parolası. O8SitLBYpCz7g/RpsqH+zM
nifi.security.keyPasswd (İsteğe bağlı) Özel anahtarın parolası.
nifi.security.truststore Güvenilen kullanıcıların ve küme düğümlerinin kimliğini doğrulayan sertifikalar veya CA sertifikaları içeren bir JKS veya PKCS12 güven deposunun yolu. ./conf/truststore.jks
nifi.security.truststoreType Truststore türü. JKS veya PKCS12
nifi.security.truststorePasswd Truststore parolası. RJlpGe6/TuN5fG+VnaEPi8
nifi.cluster.protocol.is.secure Küme içi iletişim için TLS'nin durumu. ise nifi.cluster.is.node true, küme TLS'yi etkinleştirmek için bu değeri olarak true ayarlayın. true
nifi.remote.input.secure Siteden siteye iletişim için TLS'nin durumu. true

Aşağıdaki örnek, bu özelliklerin içinde $NIFI_HOME/conf/nifi.propertiesnasıl göründüğünü gösterir. ve nifi.web.http.port değerlerinin nifi.web.http.host boş olduğunu unutmayın.

nifi.remote.input.secure=true
nifi.web.http.host=
nifi.web.http.port=
nifi.web.https.host=nifi.internal.cloudapp.net
nifi.web.https.port=9443
nifi.web.proxy.host=40.67.218.235, 40.67.218.235:443, nifi.westus2.cloudapp.com, nifi.westus2.cloudapp.com:443
nifi.security.keystore=./conf/keystore.jks 
nifi.security.keystoreType=JKS          
nifi.security.keystorePasswd=O8SitLBYpCz7g/RpsqH+zM                  
nifi.security.keyPasswd=
nifi.security.truststore=./conf/truststore.jks                                   
nifi.security.truststoreType=JKS
nifi.security.truststorePasswd=RJlpGe6/TuN5fG+VnaEPi8
nifi.cluster.protocol.is.secure=true
ZooKeeper yapılandırması

Çekirdek iletişimleri ve istemci erişimi için Apache ZooKeeper'da TLS'yi etkinleştirme yönergeleri için bkz. ZooKeeper Yönetici Kılavuzu. Yalnızca 3.5.5 veya sonraki sürümler bu işlevselliği destekler.

NiFi, sıfır öncü kümeleme ve küme koordinasyonu için ZooKeeper kullanır. 1.13.0 sürümünden itibaren NiFi, ZooKeeper'ın TLS özellikli örneklerine güvenli istemci erişimini destekler. ZooKeeper, küme üyeliğini ve küme kapsamlı işlemci durumunu düz metin olarak depolar. Bu nedenle ZooKeeper istemci isteklerinin kimliğini doğrulamak için ZooKeeper'a güvenli istemci erişimi kullanmak önemlidir. Ayrıca aktarımdaki hassas değerleri şifreleyin.

ZooKeeper'a NiFi istemci erişimi için TLS'yi etkinleştirmek için içinde $NIFI_HOME/conf/nifi.propertiesaşağıdaki özellikleri ayarlayın. Özellikleri yapılandırmadan ayarlarsanız nifi.zookeeper.client.secure true NiFi, içinde nifi.securitypropertiesbelirttiğiniz anahtar deposuna ve güven deposuna nifi.zookeeper.security geri döner.

Özellik adı Açıklama Örnek değerler
nifi.zookeeper.client.secure ZooKeeper'a bağlanırken istemci TLS'nin durumu. true
nifi.zookeeper.security.keystore Kimlik doğrulaması için ZooKeeper'a sunulan sertifikanın özel anahtarını içeren JKS, PKCS12 veya PEM anahtar deposunun yolu. ./conf/zookeeper.keystore.jks
nifi.zookeeper.security.keystoreType Anahtar deposu türü. JKS, PKCS12, PEMveya uzantıya göre otomatik algıla
nifi.zookeeper.security.keystorePasswd Anahtar deposu parolası. caB6ECKi03R/co+N+64lrz
nifi.zookeeper.security.keyPasswd (İsteğe bağlı) Özel anahtarın parolası.
nifi.zookeeper.security.truststore ZooKeeper kimliğini doğrulamak için kullanılan sertifikaları veya CA sertifikalarını içeren JKS, PKCS12 veya PEM güven deposunun yolu. ./conf/zookeeper.truststore.jks
nifi.zookeeper.security.truststoreType Truststore türü. JKS, PKCS12, PEMveya uzantıya göre otomatik algıla
nifi.zookeeper.security.truststorePasswd Truststore parolası. qBdnLhsp+mKvV7wab/L4sv
nifi.zookeeper.connect.string ZooKeeper konağına veya çekirdeğine bağlantı dizesi. Bu dize virgülle ayrılmış bir değer listesidir host:port . secureClientPort Genellikle değer değerle clientPort aynı değildir. Doğru değer için ZooKeeper yapılandırmanıza bakın. zookeeper1.internal.cloudapp.net:2281, zookeeper2.internal.cloudapp.net:2281, zookeeper3.internal.cloudapp.net:2281

Aşağıdaki örnekte, bu özelliklerin içinde nasıl göründüğü gösterilmektedir $NIFI_HOME/conf/nifi.properties:

nifi.zookeeper.client.secure=true
nifi.zookeeper.security.keystore=./conf/keystore.jks
nifi.zookeeper.security.keystoreType=JKS
nifi.zookeeper.security.keystorePasswd=caB6ECKi03R/co+N+64lrz
nifi.zookeeper.security.keyPasswd=
nifi.zookeeper.security.truststore=./conf/truststore.jks
nifi.zookeeper.security.truststoreType=JKS
nifi.zookeeper.security.truststorePasswd=qBdnLhsp+mKvV7wab/L4sv
nifi.zookeeper.connect.string=zookeeper1.internal.cloudapp.net:2281,zookeeper2.internal.cloudapp.net:2281,zookeeper3.internal.cloudapp.net:2281

ZooKeeper'ın TLS ile güvenliğini sağlama hakkında daha fazla bilgi için bkz . Apache NiFi Yönetim Kılavuzu.

Kimlik ve erişim denetimi

NiFi'de kimlik ve erişim denetimi, kullanıcı kimlik doğrulaması ve yetkilendirme yoluyla sağlanır. Kullanıcı kimlik doğrulaması için NiFi'nin aralarından seçim yapabileceğiniz birden çok seçenek vardır: Tek Kullanıcı, LDAP, Kerberos, Güvenlik Onaylama İşaretleme Dili (SAML) ve OpenID Connect (OIDC). Bir seçeneği yapılandırmazsanız NiFi, HTTPS üzerinden kullanıcıların kimliğini doğrulamak için istemci sertifikalarını kullanır.

Çok faktörlü kimlik doğrulamasını düşünüyorsanız Microsoft Entra ID ve OIDC birleşimini öneririz. Microsoft Entra ID, OIDC ile bulutta yerel çoklu oturum açmayı (SSO) destekler. Bu birleşimle, kullanıcılar birçok kurumsal güvenlik özelliğinden yararlanabilir:

  • Kullanıcı hesaplarından şüpheli etkinlikleri günlüğe kaydetme ve uyarı alma
  • Devre dışı bırakılan kimlik bilgilerine erişme girişimlerini izleme
  • Olağan dışı hesap oturum açma davranışıyla ilgili uyarı

Yetkilendirme için NiFi, kullanıcı, grup ve erişim ilkelerini temel alan zorlama sağlar. NiFi bu zorlamayı UserGroupProviders ve AccessPolicyProviders aracılığıyla sağlar. Varsayılan olarak sağlayıcılar Dosya, LDAP, Kabuk ve Azure Graph tabanlı UserGroupProviders'ı içerir. AzureGraphUserGroupProvider ile Microsoft Entra Id'den kaynak kullanıcı grupları oluşturabilirsiniz. Daha sonra bu gruplara ilke atayabilirsiniz. Yapılandırma yönergeleri için bkz . Apache NiFi Yönetim Kılavuzu.

Dosyaları ve Apache Ranger'ı temel alan AccessPolicyProviders şu anda kullanıcı ve grup ilkelerini yönetmek ve depolamak için kullanılabilir. Ayrıntılı bilgi için Apache NiFi belgelerine ve Apache Ranger belgelerine bakın.

Uygulama ağ geçidi

Uygulama ağ geçidi, NiFi arabirimi için yönetilen katman 7 yük dengeleyici sağlar. Uygulama ağ geçidini, arka uç havuzu olarak NiFi düğümlerinin sanal makine ölçek kümesini kullanacak şekilde yapılandırın.

Çoğu NiFi yüklemesi için aşağıdaki Application Gateway yapılandırmasını öneririz:

  • Katman: Standart
  • SKU boyutu: orta
  • Örnek sayısı: iki veya daha fazla

Her düğümdeki web sunucusunun durumunu izlemek için bir sistem durumu yoklaması kullanın. İyi durumda olmayan düğümleri yük dengeleyici döndürmesinden kaldırın. Bu yaklaşım, genel küme iyi durumda olmadığında kullanıcı arabirimini görüntülemeyi kolaylaştırır. Tarayıcı sizi yalnızca şu anda iyi durumda olan ve isteklere yanıt veren düğümlere yönlendirir.

Dikkate alınması gereken iki önemli durum yoklaması vardır. Birlikte kümedeki her düğümün genel durumuyla ilgili düzenli bir sinyal sağlar. İlk sistem durumu araştırmasını yoluna /NiFiişaret etmek için yapılandırın. Bu yoklama, her düğümdeki NiFi kullanıcı arabiriminin sistem durumunu belirler. yolu /nifi-api/controller/clusteriçin ikinci bir sistem durumu yoklaması yapılandırın. Bu araştırma, her düğümün şu anda iyi durumda olup olmadığını ve genel kümeye katılıp katılmadığını gösterir.

Uygulama ağ geçidinin ön uç IP adresini yapılandırmak için iki seçeneğiniz vardır:

  • Genel IP adresi ile
  • Özel alt ağ IP adresi ile

Yalnızca kullanıcıların genel İnternet üzerinden kullanıcı arabirimine erişmesi gerekiyorsa genel IP adresi ekleyin. Kullanıcılar için genel İnternet erişimi gerekli değilse, yük dengeleyici ön ucuna sanal ağdaki bir sıçrama kutusundan veya özel ağınızla eşleme yoluyla erişin. Uygulama ağ geçidini genel IP adresiyle yapılandırıyorsanız NiFi için istemci sertifikası kimlik doğrulamasını etkinleştirmenizi ve NiFi kullanıcı arabirimi için TLS'yi etkinleştirmenizi öneririz. Kaynak IP adreslerini sınırlamak için temsilci uygulama ağ geçidi alt ağında bir ağ güvenlik grubu da kullanabilirsiniz.

Tanılama ve sistem durumu izleme

Application Gateway'in tanılama ayarlarında ölçümleri ve erişim günlüklerini göndermek için bir yapılandırma seçeneği vardır. Bu seçeneği kullanarak bu bilgileri yük dengeleyiciden çeşitli yerlere gönderebilirsiniz:

  • Depolama hesabı
  • Event Hubs
  • Log Analytics çalışma alanı

Bu ayarı açmak yük dengeleme sorunlarının hatalarını ayıklamak ve küme düğümlerinin durumu hakkında içgörü elde etmek için yararlıdır.

Aşağıdaki Log Analytics sorgusu, Application Gateway perspektifinden küme düğüm durumunu zaman içinde gösterir. İyi durumda olmayan düğümler için uyarılar veya otomatik onarım eylemleri oluşturmak için benzer bir sorgu kullanabilirsiniz.

AzureDiagnostics
| summarize UnHealthyNodes = max(unHealthyHostCount_d), HealthyNodes = max(healthyHostCount_d) by bin(TimeGenerated, 5m)
| render timechart

Sorgu sonuçlarının aşağıdaki grafiğinde kümenin sistem durumunun zaman görünümü gösterilir:

Çubuk grafiğin ekran görüntüsü. Çubuklar, 24 saatlik bir süre boyunca sabit sayıda iyi durumda düğüm gösterir ve iyi durumda olmayan düğümler göstermez.

Kullanılabilirlik

Bu çözümü uygularken kullanılabilirlik hakkında aşağıdaki noktaları göz önünde bulundurun:

Yük Dengeleyici

Düğüm kapalı kalma süresi sırasında kullanıcı arabirimi kullanılabilirliğini artırmak için kullanıcı arabirimi için bir yük dengeleyici kullanın.

VM'leri ayırma

Kullanılabilirliği artırmak için ZooKeeper kümesini NiFi kümesindeki VM'lerden ayrı VM'lere dağıtın. ZooKeeper'ı yapılandırma hakkında daha fazla bilgi için Apache NiFi Sistem Yöneticisi Kılavuzu'ndaki Durum Yönetimi bölümüne bakın.

Kullanılabilirlik alanları

Kullanılabilirliği en üst düzeye çıkarmak için hem NiFi sanal makine ölçek kümesini hem de ZooKeeper kümesini bölgeler arası bir yapılandırmaya dağıtın. Kümedeki düğümler arasındaki iletişim kullanılabilirlik alanlarını aştığında, az miktarda gecikme süresine neden olur. Ancak bu gecikme genellikle kümenin aktarım hızı üzerinde en düşük düzeyde bir genel etkiye sahiptir.

Sanal makine ölçek kümeleri

NiFi düğümlerini kullanılabilir durumdaki kullanılabilirlik alanlarına yayılan tek bir sanal makine ölçek kümesine dağıtmanızı öneririz. Ölçek kümelerini bu şekilde kullanma hakkında ayrıntılı bilgi için bkz. Kullanılabilirlik Alanları kullanan bir sanal makine ölçek kümesi oluşturma.

İzleme

NiFi kümesinin durumunu ve performansını izlemek için raporlama görevlerini kullanın.

Raporlama görevi tabanlı izleme

İzleme için NiFi'de yapılandırıp çalıştırdığınız bir raporlama görevi kullanabilirsiniz. Tanılama ve sistem durumu izlemenin açıklandığı gibi Log Analytics, NiFi Azure paketinde bir raporlama görevi sağlar. İzlemeyi Log Analytics ve mevcut izleme veya günlüğe kaydetme sistemleriyle tümleştirmek için bu raporlama görevini kullanabilirsiniz.

Log Analytics sorguları

Aşağıdaki bölümlerde yer alan örnek sorgular kullanmaya başlamanıza yardımcı olabilir. Log Analytics verilerini sorgulamaya genel bakış için bkz . Azure İzleyici günlük sorguları.

İzleyici ve Log Analytics'teki günlük sorguları Kusto Sorgu Dili bir sürümünü kullanır. Ancak günlük sorguları ile Kusto sorguları arasında farklılıklar vardır. Daha fazla bilgi için bkz . Kusto sorgusuna genel bakış.

Daha yapılandırılmış öğrenme için şu öğreticilere bakın:

Log Analytics raporlama görevi

NiFi varsayılan olarak ölçüm verilerini tabloya nifimetrics gönderir. Ancak, raporlama görevi özelliklerinde farklı bir hedef yapılandırabilirsiniz. Raporlama görevi aşağıdaki NiFi ölçümlerini yakalar:

Ölçüm türü Ölçüm adı
NiFi Ölçümleri FlowFilesReceived
NiFi Ölçümleri FlowFilesSent
NiFi Ölçümleri FlowFilesQueued
NiFi Ölçümleri BytesReceived
NiFi Ölçümleri BytesWritten
NiFi Ölçümleri BytesRead
NiFi Ölçümleri BytesSent
NiFi Ölçümleri BytesQueued
Bağlantı noktası durumu ölçümleri InputCount
Bağlantı noktası durumu ölçümleri InputBytes
Bağlantı durumu ölçümleri QueuedCount
Bağlantı durumu ölçümleri QueuedBytes
Bağlantı noktası durumu ölçümleri OutputCount
Bağlantı noktası durumu ölçümleri OutputBytes
Java sanal makinesi (JVM) Ölçümleri jvm.uptime
JVM Ölçümleri jvm.heap_used
JVM Ölçümleri jvm.heap_usage
JVM Ölçümleri jvm.non_heap_usage
JVM Ölçümleri jvm.thread_states.runnable
JVM Ölçümleri jvm.thread_states.blocked
JVM Ölçümleri jvm.thread_states.timed_waiting
JVM Ölçümleri jvm.thread_states.terminated
JVM Ölçümleri jvm.thread_count
JVM Ölçümleri jvm.daemon_thread_count
JVM Ölçümleri jvm.file_descriptor_usage
JVM Ölçümleri jvm.gc.runs jvm.gc.runs.g1_old_generation jvm.gc.runs.g1_young_generation
JVM Ölçümleri jvm.gc.time jvm.gc.time.g1_young_generation jvm.gc.time.g1_old_generation
JVM Ölçümleri jvm.buff_pool_direct_capacity
JVM Ölçümleri jvm.buff_pool_direct_count
JVM Ölçümleri jvm.buff_pool_direct_mem_used
JVM Ölçümleri jvm.buff_pool_mapped_capacity
JVM Ölçümleri jvm.buff_pool_mapped_count
JVM Ölçümleri jvm.buff_pool_mapped_mem_used
JVM Ölçümleri jvm.mem_pool_code_cache
JVM Ölçümleri jvm.mem_pool_compressed_class_space
JVM Ölçümleri jvm.mem_pool_g1_eden_space
JVM Ölçümleri jvm.mem_pool_g1_old_gen
JVM Ölçümleri jvm.mem_pool_g1_survivor_space
JVM Ölçümleri jvm.mem_pool_metaspace
JVM Ölçümleri jvm.thread_states.new
JVM Ölçümleri jvm.thread_states.waiting
İşlemci Düzeyi ölçümleri BytesRead
İşlemci Düzeyi ölçümleri BytesWritten
İşlemci Düzeyi ölçümleri FlowFilesReceived
İşlemci Düzeyi ölçümleri FlowFilesSent

Aşağıda bir kümenin BytesQueued ölçümü için örnek bir sorgu verilmişti:

let table_name = nifimetrics_CL;
let metric = "BytesQueued";
table_name
| where Name_s == metric
| where Computer contains {ComputerName}
| project TimeGenerated, Computer, ProcessGroupName_s,  Count_d, Name_s
| summarize sum(Count_d) by bin(TimeGenerated, 1m),  Computer, Name_s
| render timechart 

Bu sorgu, bu ekran görüntüsündekine benzer bir grafik oluşturur:

Çizgi grafiğin ekran görüntüsü. Satırlar, dört saatlik bir süre boyunca kuyruğa alınan bayt sayısını gösterir.

Not

Azure'da NiFi çalıştırdığınızda Log Analytics raporlama göreviyle sınırlı değilsiniz. NiFi, birçok üçüncü taraf izleme teknolojisi için raporlama görevlerini destekler. Desteklenen raporlama görevlerinin listesi için Apache NiFi Belgeleri dizininin Raporlama Görevleri bölümüne bakın.

NiFi altyapısı izleme

Raporlama görevinin yanı sıra Log Analytics VM uzantısını NiFi ve ZooKeeper düğümlerine yükleyin. Bu uzantı ZooKeeper'dan günlükleri, ek VM düzeyindeki ölçümleri ve ölçümleri toplar.

NiFi uygulaması, kullanıcı, bootstrap ve ZooKeeper için özel günlükler

Daha fazla günlük yakalamak için şu adımları izleyin:

  1. Azure portalında Log Analytics çalışma alanları'nı ve ardından çalışma alanınızı seçin.

  2. Ayarlar'ın altında Özel günlükler'i seçin.

    Azure portalında MyWorkspace sayfasının ekran görüntüsü. Ayarlar ve Özel günlükler çağrılır.

  3. Özel günlük ekle'yi seçin.

    Azure portalında Özel günlük ekle seçeneğinin vurgulu olduğu Özel günlükler sayfasının ekran görüntüsü.

  4. Şu değerlerle özel bir günlük ayarlayın:

    • Ad: NiFiAppLogs
    • Yol türü: Linux
    • Yol adı: /opt/nifi/logs/nifi-app.log

    NiFi penceresinin ekran görüntüsü. NiFi uygulaması için özel bir günlüğün yapılandırma değerleri görünür.

  5. Şu değerlerle özel bir günlük ayarlayın:

    • Ad: NiFiBootstrapAndUser
    • İlk yol türü: Linux
    • İlk yol adı: /opt/nifi/logs/nifi-user.log
    • İkinci yol türü: Linux
    • İkinci yol adı: /opt/nifi/logs/nifi-bootstrap.log

    NiFi penceresinin ekran görüntüsü. NiFi önyüklemesi ve kullanıcı için özel bir günlüğün yapılandırma değerleri görünür.

  6. Şu değerlerle özel bir günlük ayarlayın:

    • Ad: NiFiZK
    • Yol türü: Linux
    • Yol adı: /opt/zookeeper/logs/*.out

    NiFi penceresinin ekran görüntüsü. ZooKeeper için özel bir günlüğün yapılandırma değerleri görünür.

İlk örneğin oluşturduğu özel tablonun örnek sorgusu NiFiAppLogs aşağıda verilmişti:

NiFiAppLogs_CL
| where TimeGenerated > ago(24h)
| where Computer contains {ComputerName} and RawData contains "error"
| limit 10

Bu sorgu aşağıdaki sonuçlara benzer sonuçlar üretir:

Zaman damgası, bilgisayar, ham veriler, tür ve kaynak I D içeren sorgu sonuçlarının ekran görüntüsü.

Altyapı günlüğü yapılandırması

VM'leri veya fiziksel bilgisayarları izlemek ve yönetmek için İzleyici'yi kullanabilirsiniz. Bu kaynaklar yerel veri merkezinizde veya başka bir bulut ortamında olabilir. Bu izlemeyi ayarlamak için Log Analytics aracısını dağıtın. Aracıyı Log Analytics çalışma alanına rapor vermek üzere yapılandırın. Daha fazla bilgi için bkz . Log Analytics aracıya genel bakış.

Aşağıdaki ekran görüntüsünde NiFi VM'leri için örnek aracı yapılandırması gösterilmektedir. Tabloda Perf toplanan veriler depolanıyor.

Gelişmiş ayarlar penceresini gösteren ekran görüntüsü. Veri ve Linux Performans Sayaçları menüsü vurgulanır. Performans sayacı ayarları görünür.

NiFi uygulama Perf günlükleri için örnek bir sorgu aşağıda verilmişti:

let cluster_name = {ComputerName};
// The hourly average of CPU usage across all computers.
Perf
| where Computer contains {ComputerName}
| where CounterName == "% Processor Time" and InstanceName == "_Total"
| where ObjectName == "Processor"
| summarize CPU_Time_Avg = avg(CounterValue) by bin(TimeGenerated, 30m), Computer

Bu sorgu, bu ekran görüntüsündekine benzer bir rapor oluşturur:

Çizgi grafiğin ekran görüntüsü. Çizgiler, NiFi VM'lerinin dört saatlik bir süre boyunca kullandığı CPU yüzdesini gösterir.

Uyarılar

NiFi kümesinin durumu ve performansı hakkında uyarılar oluşturmak için İzleyici'yi kullanın. Örnek uyarılar şunlardır:

  • Toplam kuyruk sayısı eşiği aştı.
  • Değer BytesWritten beklenen eşiğin altında.
  • Değer FlowFilesReceived bir eşiğin altındadır.
  • Küme iyi durumda değil.

İzleyici'de uyarıları ayarlama hakkında daha fazla bilgi için bkz . Microsoft Azure'da uyarılara genel bakış.

Yapılandırma parametreleri

Aşağıdaki bölümlerde, ZooKeeper ve Java dahil olmak üzere NiFi ve bağımlılıkları için önerilen, varsayılan olmayan yapılandırmalar ele alınmaktadır. Bu ayarlar bulutta mümkün olan küme boyutları için uygundur. Aşağıdaki yapılandırma dosyalarındaki özellikleri ayarlayın:

  • $NIFI_HOME/conf/nifi.properties
  • $NIFI_HOME/conf/bootstrap.conf
  • $ZOOKEEPER_HOME/conf/zoo.cfg
  • $ZOOKEEPER_HOME/bin/zkEnv.sh

Kullanılabilir yapılandırma özellikleri ve dosyaları hakkında ayrıntılı bilgi için bkz . Apache NiFi Sistem Yöneticisi Kılavuzu ve ZooKeeper Yönetici Kılavuzu.

NiFi

Azure dağıtımı için içindeki $NIFI_HOME/conf/nifi.propertiesözellikleri ayarlamayı göz önünde bulundurun. Aşağıdaki tabloda en önemli özellikler listelenir. Daha fazla öneri ve içgörü için Apache NiFi posta listelerine bakın.

Parametre Açıklama Varsayılan Öneri
nifi.cluster.node.connection.timeout Diğer küme düğümlerine bağlantı açarken ne kadar süre beklenmesi gerekir? 5 saniye 60 saniye
nifi.cluster.node.read.timeout Diğer küme düğümlerine istekte bulunurken yanıt bekleme süresi. 5 saniye 60 saniye
nifi.cluster.protocol.heartbeat.interval Sinyallerin küme düzenleyicisine ne sıklıkta geri gönderebilirsiniz? 5 saniye 60 saniye
nifi.cluster.node.max.concurrent.requests REST API çağrıları gibi HTTP çağrılarını diğer küme düğümlerine çoğaltırken kullanılacak paralellik düzeyi. 100 500
nifi.cluster.node.protocol.threads Kümeler arası/çoğaltılmış iletişimler için ilk iş parçacığı havuzu boyutu. 10 50
nifi.cluster.node.protocol.max.threads Kümeler arası/çoğaltılmış iletişimler için kullanılacak en fazla iş parçacığı sayısı. 50 75
nifi.cluster.flow.election.max.candidates Geçerli akışın ne olduğuna karar verirken kullanılacak düğüm sayısı. Bu değer, belirtilen sayıdaki oyunu kısa devreler. empty 75
nifi.cluster.flow.election.max.wait.time Geçerli akışın ne olduğuna karar vermeden önce düğümlerde bekleme süresi. 5 dakika 5 dakika

Küme davranışı

Kümeleri yapılandırırken aşağıdaki noktaları göz önünde bulundurun.

Timeout

Kümenin ve düğümlerinin genel durumunu sağlamak için zaman aşımlarını artırmak yararlı olabilir. Bu uygulama, hataların geçici ağ sorunlarından veya yüksek yüklerden kaynaklanmamasını garanti altına alır.

Dağıtılmış bir sistemde tek tek sistemlerin performansı farklılık gösterir. Bu varyasyon, genellikle düğümler arası, kümeler arası iletişimi etkileyen ağ iletişimlerini ve gecikme süresini içerir. Ağ altyapısı veya sistemin kendisi bu değişime neden olabilir. Sonuç olarak, değişim olasılığı büyük olasılıkla büyük sistem kümelerindedir. Yük altındaki Java uygulamalarında, Java sanal makinesinde (JVM) atık toplama (GC) duraklamaları istek yanıt sürelerini de etkileyebilir.

Zaman aşımlarını sisteminizin gereksinimlerine uyacak şekilde yapılandırmak için aşağıdaki bölümlerdeki özellikleri kullanın:

nifi.cluster.node.connection.timeout ve nifi.cluster.node.read.timeout

özelliği, nifi.cluster.node.connection.timeout bir bağlantı açılırken ne kadar süre beklenmek üzere yapılacağını belirtir. nifi.cluster.node.read.timeout özelliği, istekler arasında veri alınırken ne kadar süre bekleneceklerini belirtir. Her özellik için varsayılan değer beş saniyedir. Bu özellikler düğümden düğüme istekler için geçerlidir. Bu değerlerin artırılması, ilgili birkaç sorunun giderilmesine yardımcı olur:

  • Sinyal kesintileri nedeniyle küme düzenleyicisinin bağlantısı kesiliyor
  • Kümeye katılırken koordinatörden akış alınamaması
  • Siteden siteye (S2S) ve yük dengeleme iletişimleri oluşturma

Kümenizin üç veya daha az düğüm gibi çok küçük bir ölçek kümesi yoksa varsayılan değerlerden daha büyük değerler kullanın.

nifi.cluster.protocol.heartbeat.interval

NiFi kümeleme stratejisinin bir parçası olarak, her düğüm sağlıklı durumunu iletmek için bir sinyal yayar. Varsayılan olarak düğümler her beş saniyede bir sinyal gönderir. Küme düzenleyicisi bir düğümden bir satırdaki sekiz sinyalin başarısız olduğunu algılarsa düğümün bağlantısını keser. Yavaş sinyalleri barındırmaya yardımcı olmak ve kümenin nifi.cluster.protocol.heartbeat.interval düğümlerin gereksiz yere bağlantısını kesmesini önlemek için özelliğinde ayarlanan aralığı artırın.

Eşzamanlılık

Eşzamanlılık ayarlarını yapılandırmak için aşağıdaki bölümlerdeki özellikleri kullanın:

nifi.cluster.node.protocol.threads ve nifi.cluster.node.protocol.max.threads

özelliği, nifi.cluster.node.protocol.max.threads S2S yük dengeleme ve kullanıcı arabirimi toplama gibi tüm küme iletişimleri için kullanılacak en fazla iş parçacığı sayısını belirtir. Bu özellik için varsayılan değer 50 iş parçacığıdır. Büyük kümelerde, bu işlemlerin gerektirdiği daha fazla sayıda isteği hesaba eklemek için bu değeri artırın.

özelliği ilk nifi.cluster.node.protocol.threads iş parçacığı havuzu boyutunu belirler. Varsayılan değer 10 iş parçacığıdır. Bu değer en düşük değerdir. gerektiğinde içinde nifi.cluster.node.protocol.max.threadsayarlanan en yüksek değere kadar büyür. Başlatma sırasında nifi.cluster.node.protocol.threads büyük bir ölçek kümesi kullanan kümelerin değerini artırın.

nifi.cluster.node.max.concurrent.requests

REST API çağrıları ve UI çağrıları gibi birçok HTTP isteğinin kümedeki diğer düğümlere çoğaltılması gerekir. Kümenin boyutu büyüdükçe, artan sayıda istek çoğaltılır. özelliği bekleyen nifi.cluster.node.max.concurrent.requests isteklerin sayısını sınırlar. Değeri beklenen küme boyutunu aşmalıdır. Varsayılan değer 100 eşzamanlı istektir. Üç veya daha az düğümden oluşan küçük bir küme çalıştırmadığınız sürece, bu değeri artırarak başarısız istekleri önleyin.

Akış seçimi

Akış seçimi ayarlarını yapılandırmak için aşağıdaki bölümlerdeki özellikleri kullanın:

nifi.cluster.flow.election.max.candidates

NiFi, sıfır öncü kümeleme kullanır, yani belirli bir yetkili düğüm yoktur. Sonuç olarak, düğümler hangi akış tanımının doğru olduğunu oylar. Ayrıca kümeye hangi düğümlerin katılacağını belirlemek için oy kullanırlar.

Varsayılan olarak özellik, nifi.cluster.flow.election.max.candidates özelliğin belirttiği en uzun bekleme süresidir nifi.cluster.flow.election.max.wait.time . Bu değer çok yüksek olduğunda, başlatma yavaş olabilir. için nifi.cluster.flow.election.max.wait.time varsayılan değer beş dakikadır. Beklemenin gerekenden fazla olmadığından emin olmak için en fazla aday sayısını veya gibi 1 boş olmayan bir değere ayarlayın. Bu özelliği ayarlarsanız, küme boyutuna veya beklenen küme boyutunun bazı çoğunluk bölümüne karşılık gelen bir değer atayın. 10 veya daha az düğümden oluşan küçük, statik kümeler için bu değeri kümedeki düğüm sayısına ayarlayın.

nifi.cluster.flow.election.max.wait.time

Elastik bulut ortamında konak sağlama süresi, uygulamanın başlangıç süresini etkiler. özelliği, nifi.cluster.flow.election.max.wait.time Bir akışa karar vermeden önce NiFi'nin ne kadar bekleyeceğini belirler. Bu değeri kümenin başlangıç boyutunda genel başlatma süresiyle uygun hale getirin. İlk testlerde, önerilen örnek türlerine sahip tüm Azure bölgelerinde beş dakika yeterli değildir. Ancak, düzenli olarak sağlama süresi varsayılan değeri aşarsa bu değeri artırabilirsiniz.

Java

Java'nın LTS sürümünü kullanmanızı öneririz. Java 11 daha hızlı çöp toplama uygulamasını desteklediğinden bu sürümlerden Java 11, Java 8'e göre biraz daha tercih edilir. Ancak, iki sürümü de kullanarak yüksek performanslı bir NiFi dağıtımına sahip olmak mümkündür.

Aşağıdaki bölümlerde NiFi çalıştırılırken kullanılacak yaygın JVM yapılandırmaları açıklanmıştır. konumundaki bootstrap yapılandırma dosyasında $NIFI_HOME/conf/bootstrap.confJVM parametrelerini ayarlayın.

Çöp toplayıcı

Java 11 çalıştırıyorsanız çoğu durumda G1 çöp toplayıcısını (G1GC) kullanmanızı öneririz. G1GC, GC duraklamalarının uzunluğunu azalttığı için, G1GC ParallelGC'ye göre performansı geliştirmiştir. G1GC, Java 11'de varsayılan değerdir, ancak içinde aşağıdaki değeri bootstrap.confayarlayarak bunu açıkça yapılandırabilirsiniz:

java.arg.13=-XX:+UseG1GC

Java 8 çalıştırıyorsanız G1GC kullanmayın. Bunun yerine ParallelGC kullanın. G1GC'nin Java 8 uygulamasında önerilen depo uygulamalarıyla kullanmanızı engelleyen eksiklikler vardır. ParallelGC, G1GC'den daha yavaştır. Ancak ParallelGC ile Java 8 ile yüksek performanslı bir NiFi dağıtımına sahip olabilirsiniz.

Yığın

Dosyadaki bootstrap.conf bir özellik kümesi, NiFi JVM yığınının yapılandırmasını belirler. Standart akış için şu ayarları kullanarak 32 GB'lık bir yığın yapılandırın:

java.arg.3=-Xmx32g
java.arg.2=-Xms32g

JVM işlemine uygulanacak en uygun yığın boyutunu seçmek için iki faktörü göz önünde bulundurun:

  • Veri akışının özellikleri
  • NiFi'nin işlemede belleği kullanma şekli

Ayrıntılı belgeler için bkz . Derinlemesine Apache NiFi.

Yığını yalnızca işleme gereksinimlerini karşılamak için gerektiği kadar büyük yapın. Bu yaklaşım GC duraklamalarının uzunluğunu en aza indirir. Java çöp toplamayla ilgili genel konular için Java sürümünüz için çöp toplama ayarlama kılavuzuna bakın.

JVM bellek ayarlarını yaparken şu önemli faktörleri göz önünde bulundurun:

  • Belirli bir dönemde etkin olan FlowFiles veya NiFi veri kayıtlarının sayısı. Bu sayı, arka baskılı veya kuyruğa alınmış FlowFile'ları içerir.

  • FlowFiles içinde tanımlanan özniteliklerin sayısı.

  • bir işlemcinin belirli bir içerik parçasını işlemek için gereken bellek miktarı.

  • İşlemcinin verileri işleme yöntemi:

    • Akış verileri
    • Kayıt odaklı işlemcileri kullanma
    • Tüm verileri aynı anda bellekte tutma

Bu ayrıntılar önemlidir. İşleme sırasında NiFi, bellekteki her FlowFile için başvuruları ve öznitelikleri tutar. En yüksek performansta, sistemin kullandığı bellek miktarı canlı FlowFile sayısı ve içerdiği tüm özniteliklerle orantılıdır. Bu sayı kuyruğa alınmış FlowFiles içerir. NiFi, diske geçiş yapabilir. Ancak performansı zedelediğinden bu seçenekten kaçının.

Ayrıca temel nesne bellek kullanımını da unutmayın. Özellikle, yığınınızı nesneleri bellekte tutacak kadar büyük hale getirin. Bellek ayarlarını yapılandırmaya yönelik şu ipuçlarını göz önünde bulundurun:

  • Ayarı -Xmx4G kullanmaya başlayıp belleği gerektiği gibi muhafazakar bir şekilde artırarak akışınızı temsili verilerle ve minimum geri baskısıyla çalıştırın.
  • Bu ayardan -Xmx4G başlayıp küme boyutunu gerektiği gibi muhafazakar bir şekilde artırarak akışınızı temsili verilerle ve en yüksek geri baskısıyla çalıştırın.
  • VisualVM ve YourKit gibi araçları kullanarak akış çalışırken uygulamanın profilini oluşturun.
  • Yığındaki konservatif artışlar performansı önemli ölçüde geliştirmiyorsa, akışları, işlemcileri ve sisteminizin diğer yönlerini yeniden tasarlamayı göz önünde bulundurun.
Ek JVM parametreleri

Aşağıdaki tabloda ek JVM seçenekleri listelenmiştir. Ayrıca ilk testte en iyi sonucu veren değerleri de sağlar. Testler GC etkinliğini ve bellek kullanımını gözlemledi ve dikkatli profil oluşturma kullandı.

Parametre Açıklama JVM varsayılan Öneri
InitiatingHeapOccupancyPercent İşaretleme döngüsü tetiklemeden önce kullanılan yığın miktarı. 45 35
ParallelGCThreads GC'nin kullandığı iş parçacığı sayısı. Bu değer, sistem üzerindeki genel etkiyi sınırlamak için eşlenir. vCPU sayısının 5/8'i 8
ConcGCThreads Paralel olarak çalıştırılacak GC iş parçacığı sayısı. Bu değer, eşlenen ParallelGCThreads için hesaba eklenir. Değerin 1/4'leri ParallelGCThreads 4
G1ReservePercent Boş tutulacak ayrılmış bellek yüzdesi. Bu değer, boşluk tükenmesini önlemek için artırılır ve bu da tam GC'yi önlemeye yardımcı olur. 10 20
UseStringDeduplication Özdeş dizelere yapılan başvuruları tanımlamaya ve yinelenenleri kaldırmaya çalışıp çalışmayacağınız. Bu özelliğin açılması bellek tasarrufuna neden olabilir. - hediye

NiFi'ye bootstrap.confaşağıdaki girdileri ekleyerek bu ayarları yapılandırın:

java.arg.17=-XX:+UseStringDeduplication
java.arg.18=-XX:G1ReservePercent=20
java.arg.19=-XX:ParallelGCThreads=8
java.arg.20=-XX:ConcGCThreads=4
java.arg.21=-XX:InitiatingHeapOccupancyPercent=35

ZooKeeper

Gelişmiş hataya dayanıklılık için ZooKeeper'ı küme olarak çalıştırın. Çoğu NiFi dağıtımı ZooKeeper'a nispeten mütevazı bir yük yüklese de bu yaklaşımı benimser. ZooKeeper için kümeleyi açıkça açın. ZooKeeper varsayılan olarak tek sunucu modunda çalışır. Ayrıntılı bilgi için ZooKeeper Yönetici Kılavuzu'ndaki Kümelenmiş (Çoklu Sunucu) Kurulumu bölümüne bakın.

Kümeleme ayarları dışında ZooKeeper yapılandırmanız için varsayılan değerleri kullanın.

Büyük bir NiFi kümeniz varsa, daha fazla sayıda ZooKeeper sunucusu kullanmanız gerekebilir. Daha küçük küme boyutları için daha küçük VM boyutları ve Standart SSD ile yönetilen diskler yeterlidir.

Katkıda Bulunanlar

Bu makale Microsoft tarafından yönetilir. Başlangıçta aşağıdaki katkıda bulunanlar tarafından yazılmıştır.

Asıl yazar:

Genel olmayan LinkedIn profillerini görmek için LinkedIn'de oturum açın.

Sonraki adımlar

Bu belgedeki malzeme ve öneriler çeşitli kaynaklardan geldi:

  • Deneme
  • Azure için en iyi yöntemler
  • NiFi topluluk bilgisi, en iyi yöntemler ve belgeler

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: