Upozornění
Tento článek odkazuje na CentOS, linuxovou distribuci, která se blíží stavu Konec životnosti (EOL). Zvažte své použití a odpovídajícím způsobem naplánujte. Další informace najdete v doprovodných materiálech CentOS End Of Life.
Tento ukázkový scénář ukazuje, jak spustit Apache NiFi v Azure. NiFi poskytuje systém pro zpracování a distribuci dat.
Apache®, Apache NiFi a NiFi®® jsou registrované ochranné známky nebo ochranné známky nadace Apache Software Foundation v USA a/nebo v jiných zemích. Použití těchto značek nevyžaduje žádné doporučení Apache Software Foundation.
Architektura
Stáhněte si soubor aplikace Visio s touto architekturou.
Workflow
Aplikace NiFi běží na virtuálních počítačích v uzlech clusteru NiFi. Virtuální počítače jsou ve škálovací sadě virtuálních počítačů, kterou konfigurace nasadí napříč zónami dostupnosti.
Apache ZooKeeper běží na virtuálních počítačích v samostatném clusteru. NiFi používá cluster ZooKeeper k těmto účelům:
- Volba koordinačního uzlu clusteru
- Koordinace toku dat
Aplikace Azure Gateway poskytuje vyrovnávání zatížení vrstvy 7 pro uživatelské rozhraní, které běží na uzlech NiFi.
Monitorování a její funkce Log Analytics shromažďuje, analyzuje a pracuje s telemetrií ze systému NiFi. Telemetrie zahrnuje systémové protokoly NiFi, metriky stavu systému a metriky výkonu.
Azure Key Vault bezpečně ukládá certifikáty a klíče pro cluster NiFi.
Microsoft Entra ID poskytuje jednotné přihlašování (SSO) a vícefaktorové ověřování.
Komponenty
- NiFi poskytuje systém pro zpracování a distribuci dat.
- ZooKeeper je opensourcový server, který spravuje distribuované systémy.
- Virtual Machines je nabídka typu infrastruktura jako služba (IaaS). Virtuální počítače můžete použít k nasazení škálovatelných výpočetních prostředků na vyžádání. Virtual Machines poskytuje flexibilitu virtualizace, ale eliminuje nároky na údržbu fyzického hardwaru.
- Škálovací sady virtuálních počítačů Azure poskytují způsob správy skupiny virtuálních počítačů s vyrovnáváním zatížení. Počet instancí virtuálních počítačů v sadě může automaticky navýšit nebo snížit reakci na poptávku nebo definovaný plán.
- Zóny dostupnosti jsou jedinečná fyzická umístění v rámci oblasti Azure. Tyto nabídky s vysokou dostupností chrání aplikace a data před selháním datacentra.
- Application Gateway je nástroj pro vyrovnávání zatížení, který spravuje provoz do webových aplikací.
- Monitorování shromažďuje a analyzuje data o prostředích a prostředcích Azure. Tato data zahrnují telemetrii aplikací, jako jsou metriky výkonu a protokoly aktivit. Další informace najdete v části Aspekty monitorování dále v tomto článku.
- Log Analytics je nástroj webu Azure Portal, který spouští dotazy na monitorování dat protokolů. Log Analytics také poskytuje funkce pro grafy a statisticky analyzující výsledky dotazů.
- Azure DevOps Services poskytuje služby, nástroje a prostředí pro správu projektů a nasazení kódování.
- Key Vault bezpečně ukládá a řídí přístup k tajným kódům systému, jako jsou klíče rozhraní API, hesla, certifikáty a kryptografické klíče.
- Microsoft Entra ID je cloudová služba identit, která řídí přístup k Azure a dalším cloudovým aplikacím.
Alternativy
- Azure Data Factory nabízí alternativu k tomuto řešení.
- Místo služby Key Vault můžete k ukládání systémových tajných kódů použít srovnatelnou službu.
- Apache Airflow. Podívejte se , jak se airflow a NiFi liší.
- Podporovanou podnikovou alternativu NiFi, jako je Cloudera Apache NiFi, je možné použít. Nabídka Cloudera je dostupná prostřednictvím Azure Marketplace.
Podrobnosti scénáře
V tomto scénáři se NiFi spouští v clusterované konfiguraci napříč virtuálními počítači Azure ve škálovací sadě. Většina doporučení tohoto článku se ale vztahuje také na scénáře, které spouštějí NiFi v režimu jedné instance na jednom virtuálním počítači. Osvědčené postupy v tomto článku ukazují škálovatelné, vysoce dostupné a zabezpečené nasazení.
Potenciální případy použití
NiFi funguje dobře pro přesouvání dat a správu toku dat:
- Připojení oddělení systémů v cloudu
- Přesun dat do a z Azure Storage a dalších úložišť dat
- Integrace cloudových a hybridních cloudových aplikací se službami Azure IoT, Azure Stack a Azure Kubernetes Service (AKS)
V důsledku toho se toto řešení vztahuje na mnoho oblastí:
Moderní datové sklady (MDWs) spojují strukturovaná a nestrukturovaná data ve velkém měřítku. Shromažďují a ukládají data z různých zdrojů, jímek a formátů. NiFi exceluje při ingestování dat do MDWs založených na Azure z následujících důvodů:
- Více než 200 procesorů je k dispozici pro čtení, zápis a manipulaci s daty.
- Systém podporuje služby Storage, jako je Azure Blob Storage, Azure Data Lake Storage, Azure Event Hubs, Azure Queue Storage, Azure Cosmos DB a Azure Synapse Analytics.
- Robustní možnosti provenience dat umožňují implementovat kompatibilní řešení. Informace o zaznamenávání provenience dat ve funkci Log Analytics služby Azure Monitor najdete v části Aspekty vytváření sestav dále v tomto článku.
NiFi může běžet samostatně na zařízeních s malými nároky. V takových případech umožňuje NiFi zpracovávat hraniční data a přesouvat tato data do větších instancí nebo clusterů NiFi v cloudu. NiFi pomáhá filtrovat, transformovat a určovat prioritu hraničních dat v pohybu, což zajišťuje spolehlivé a efektivní toky dat.
Průmyslová řešení IoT (IIoT) spravují tok dat z hraničního zařízení do datového centra. Tento tok začíná získáváním dat z průmyslových řídicích systémů a zařízení. Data se pak přesunou do řešení pro správu dat a MDWs. NiFi nabízí možnosti, díky kterým je vhodná pro získávání a přesun dat:
- Funkce zpracování dat Edge
- Podpora protokolů, které používají brány IoT a zařízení
- Integrace se službami Event Hubs a Storage
Aplikace IoT v oblastech prediktivní údržby a správy dodavatelského řetězce můžou tuto funkci využít.
Doporučení
Při použití tohoto řešení mějte na paměti následující body:
Doporučené verze NiFi
Při spuštění tohoto řešení v Azure doporučujeme použít verzi 1.13.2 nebo novější rozhraní NiFi. Můžete spouštět jiné verze, ale můžou vyžadovat jiné konfigurace než ty, které jsou v této příručce.
Pokud chcete na virtuální počítače Azure nainstalovat NiFi, je nejlepší stáhnout si pohodlné binární soubory ze stránky pro stahování NiFi. Binární soubory můžete také sestavit ze zdrojového kódu.
Doporučené verze ZooKeeperu
Pro tuto ukázkovou úlohu doporučujeme používat verze 3.5.5 a novější nebo 3.6.x ZooKeeper.
ZooKeeper můžete na virtuální počítače Azure nainstalovat pomocí oficiálních binárních souborů nebo zdrojového kódu. Obě verze jsou k dispozici na stránce vydaných verzí Apache ZooKeeper.
Důležité informace
Tyto aspekty implementují pilíře dobře architektuře Azure, což je sada hlavních principů, které je možné použít ke zlepšení kvality úlohy. Další informace naleznete v tématu Microsoft Azure Well-Architected Framework.
Informace o konfiguraci NiFi naleznete v příručce k systému Apache NiFi Správa istrator. Při implementaci tohoto řešení mějte také na paměti tyto aspekty.
Optimalizace nákladů
Optimalizace nákladů se zabývá způsoby, jak snížit zbytečné výdaje a zlepšit efektivitu provozu. Další informace najdete v tématu Přehled pilíře optimalizace nákladů.
- Pomocí cenové kalkulačky Azure můžete odhadnout náklady na prostředky v této architektuře.
- Odhad zahrnující všechny služby v této architektuře s výjimkou vlastního řešení pro upozorňování najdete v tomto ukázkovém profilu nákladů.
Aspekty virtuálních počítačů
Následující části obsahují podrobný přehled konfigurace virtuálních počítačů NiFi:
Velikost virtuálního počítače
Tato tabulka uvádí doporučené velikosti virtuálních počítačů, se kterými můžete začít. Pro většinu toků dat pro obecné účely je nejlepší Standard_D16s_v3. Každý tok dat v NiFi má ale jiné požadavky. Otestujte tok a podle potřeby změňte jeho velikost na základě skutečných požadavků toku.
Zvažte povolení akcelerovaných síťových služeb na virtuálních počítačích, aby se zvýšil výkon sítě. Další informace najdete v tématu Sítě pro škálovací sady virtuálních počítačů Azure.
Velikost virtuálního počítače | Virtuální procesory | Paměť v GB | Maximální propustnost datového disku bez mezipaměti v vstupně-výstupních operacích za sekundu (IOPS) na MB/s* | Maximální počet síťových rozhraní /Očekávaná šířka pásma sítě (Mb/s) |
---|---|---|---|---|
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 |
* Zakažte ukládání datových disků do mezipaměti pro všechny datové disky, které používáte na uzlech NiFi.
** Tuto skladovou položku doporučujeme pro většinu toků dat pro obecné účely. Skladové položky virtuálních počítačů Azure s podobnými virtuálními procesory a konfiguracemi paměti by také měly být přiměřené.
Operační systém virtuálního počítače (OS)
Doporučujeme spustit NiFi v Azure v některém z následujících hostovaných operačních systémů:
- Ubuntu 18.04 LTS nebo novější
- CentOS 7.9
Aby bylo možné splnit konkrétní požadavky toku dat, je důležité upravit několik nastavení na úrovni operačního systému, mezi které patří:
- Maximální počet forkovaných procesů
- Maximální počet popisovačů souborů
- Doba přístupu.
atime
Po úpravě operačního systému tak, aby odpovídal očekávanému případu použití, použijte Azure VM Image Builder k kodifikování generování těchto vyladěných imagí. Pokyny specifické pro NiFi najdete v tématu Osvědčené postupy konfigurace v příručce k systému Apache NiFi Správa istrator.
Úložiště
Uložte různá úložiště NiFi na datové disky, nikoli na disk s operačním systémem, a to ze tří hlavních důvodů:
- Toky často mají požadavky na vysokou propustnost disku, které jeden disk nemůže splnit.
- Nejlepší je oddělit operace disku NiFi od operací disku s operačním systémem.
- Úložiště by neměla být v dočasném úložišti.
Následující části popisují pokyny pro konfiguraci datových disků. Tyto pokyny jsou specifické pro Azure. Další informace o konfiguraci úložišť najdete v tématu Správa stavu v příručce k systému Apache NiFi Správa istrator.
Datový typ a velikost datového disku
Při konfiguraci datových disků pro NiFi zvažte tyto faktory:
- Typ disku
- Velikost disku
- Celkový počet disků
Poznámka:
Aktuální informace o typech disků, velikosti a cenách najdete v tématu Úvod ke spravovaným diskům Azure.
Následující tabulka ukazuje typy spravovaných disků, které jsou aktuálně dostupné v Azure. NiFi můžete použít s některým z těchto typů disků. Pro toky dat s vysokou propustností ale doporučujeme ssd úrovně Premium.
Disk úrovně Ultra (NVM Express (NVMe)) | SSD úrovně Premium | SSD úrovně Standard | HDD úrovně Standard | |
---|---|---|---|---|
Typ disku | SSD | SSD | SSD | HDD |
Maximální velikost disku | 65 536 GB | 32 767 GB | 32 767 GB | 32 767 GB |
Max. propustnost | 2 000 MiB/s | 900 MiB/s | 750 MiB/s | 500 MiB/s |
Maximální IOPS | 160 000 | 20,000 | 6 000 | 2 000 |
Ke zvýšení propustnosti toku dat použijte aspoň tři datové disky. Osvědčené postupy pro konfiguraci úložišť na discích najdete v části Konfigurace úložiště dále v tomto článku.
Následující tabulka uvádí relevantní čísla velikosti a propustnosti pro každou velikost a typ disku.
Standard HDD S15 | Standard HDD S20 | Standard HDD S30 | Standard SSD S15 | Standard SSD S20 | Standard SSD S30 | Premium SSD P15 | Premium SSD P20 | Premium SSD P30 | |
---|---|---|---|---|---|---|---|---|---|
Velikost disku v GB | 256 | 512 | 1,024 | 256 | 512 | 1,024 | 256 | 512 | 1,024 |
IOPS na disk | Až 500 | Až 500 | Až 500 | Až 500 | Až 500 | Až 500 | 1 100 | 2 300 | 5 000 |
Propustnost na disk | Až 60 MB/s | Až 60 MB/s | Až 60 MB/s | Až 60 MB/s | Až 60 MB/s | Až 60 MB/s | 125 MB/s | 150 MB/s | 200 MB/s |
Pokud váš systém dosáhne limitů virtuálních počítačů, přidání dalších disků nemusí zvýšit propustnost:
- Omezení IOPS a propustnosti závisí na velikosti disku.
- Velikost virtuálního počítače, kterou zvolíte, umístí omezení vstupně-výstupních operací za sekundu a propustnosti pro virtuální počítač na všech datových discích.
Omezení propustnosti disku na úrovni virtuálního počítače najdete v tématu Velikosti virtuálních počítačů s Linuxem v Azure.
Ukládání do mezipaměti disku virtuálního počítače
Na virtuálních počítačích Azure spravuje funkce Hostitel Ukládání do mezipaměti ukládání do mezipaměti pro zápis do disku. Pokud chcete zvýšit propustnost datových disků, které používáte pro úložiště, vypněte ukládání do mezipaměti zápisu na disk nastavením hostitele Ukládání do mezipaměti na None
.
Konfigurace úložiště
Osvědčeným postupem pro NiFi je použití samostatného disku nebo disků pro každé z těchto úložišť:
- Content
- FlowFile
- Provenience
Tento přístup vyžaduje minimálně tři disky.
NiFi také podporuje prokládání na úrovni aplikace. Tato funkce zvyšuje velikost nebo výkon úložišť dat.
Následující výňatek pochází z konfiguračního nifi.properties
souboru. Tato konfigurace rozdělí úložiště mezi spravované disky, které jsou připojené k virtuálním počítačům:
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
Další informace o návrhu pro vysoce výkonné úložiště najdete v tématu Azure Premium Storage: návrh pro zajištění vysokého výkonu.
Sestavy
NiFi obsahuje úlohu generování sestav pro funkci Log Analytics.
Tuto úlohu generování sestav můžete použít k přesměrování událostí provenience na nákladově efektivní trvalé dlouhodobé úložiště. Funkce Log Analytics poskytuje rozhraní dotazů pro zobrazení a grafování jednotlivých událostí. Další informace o těchtodotazch
Tuto úlohu můžete použít také s nestálým úložištěm pro provenience v paměti. V mnoha scénářích pak můžete dosáhnout zvýšení propustnosti. Tento přístup je ale rizikový, pokud potřebujete zachovat data událostí. Ujistěte se, že nestálé úložiště splňuje vaše požadavky na stálost pro události provenience. Další informace naleznete v tématu Provenance Repository in the Apache NiFi System Správa istrator's Guide.
Před použitím tohoto procesu vytvořte v předplatném Azure pracovní prostor služby Log Analytics. Nejlepší je nastavit pracovní prostor ve stejné oblasti jako vaše úloha.
Konfigurace úlohy vytváření sestav provenience:
- Otevřete nastavení kontroleru v NiFi.
- Vyberte nabídku úkolů vytváření sestav.
- Vyberte Vytvořit nový úkol vytváření sestav.
- Vyberte úlohu generování sestav Azure Log Analytics.
Následující snímek obrazovky ukazuje nabídku vlastností pro tuto úlohu vytváření sestav:
Jsou vyžadovány dvě vlastnosti:
- ID pracovního prostoru služby Log Analytics
- Klíč pracovního prostoru služby Log Analytics
Tyto hodnoty najdete na webu Azure Portal tak, že přejdete do pracovního prostoru služby Log Analytics.
K dispozici jsou také další možnosti pro přizpůsobení a filtrování událostí provenience, které systém odesílá.
Zabezpečení
Zabezpečení poskytuje záruky proti záměrným útokům a zneužití cenných dat a systémů. Další informace najdete v tématu Přehled pilíře zabezpečení.
NiFi můžete zabezpečit z hlediska ověřování a autorizace . NiFi můžete také zabezpečit pro veškerou síťovou komunikaci, včetně:
- V rámci clusteru.
- Mezi clusterem a ZooKeeperem.
Pokyny k zapnutí následujících možností najdete v průvodci Správa istrátory Apache NiFi:
- Kerberos
- Protokol LDAP (Lightweight Directory Access Protocol)
- Ověřování a autorizace založené na certifikátech
- Obousměrná protokol SSL (Secure Sockets Layer) pro komunikaci mezi clustery
Pokud zapnete zabezpečený klientský přístup ZooKeeper, nakonfigurujte NiFi přidáním souvisejících vlastností do konfiguračního bootstrap.conf
souboru. Následující položky konfigurace poskytují příklad:
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]
Obecná doporučení najdete ve standardních hodnotách zabezpečení Linuxu.
Zabezpečení sítě
Při implementaci tohoto řešení mějte na paměti následující body týkající se zabezpečení sítě:
Skupiny zabezpečení sítě
V Azure můžete pomocí skupin zabezpečení sítě omezit síťový provoz.
Pro úlohy správy doporučujeme jumpbox pro připojení ke clusteru NiFi. Použijte tento virtuální počítač s posílením zabezpečení s přístupem za běhu (JIT) nebo službou Azure Bastion. Nastavte skupiny zabezpečení sítě pro řízení způsobu udělení přístupu k jumpboxu nebo službě Azure Bastion. Izolaci a kontrolu sítě můžete dosáhnout pomocí skupin zabezpečení sítě v různých podsítích architektury.
Následující snímek obrazovky ukazuje komponenty v typické virtuální síti. Obsahuje společnou podsíť pro jumpbox, škálovací sadu virtuálních počítačů a virtuální počítače ZooKeeper. Tato zjednodušená topologie sítě seskupuje komponenty do jedné podsítě. Postupujte podle pokynů vaší organizace pro oddělení povinností a návrhu sítě.
Důležité informace o odchozím přístupu k internetu
NiFi v Azure ke spuštění nepotřebuje přístup k veřejnému internetu. Pokud tok dat k načtení dat nepotřebuje přístup k internetu, vylepšete zabezpečení clusteru pomocí následujícího postupu a zakažte odchozí přístup k internetu:
Vytvořte ve virtuální síti další pravidlo skupiny zabezpečení sítě.
Použijte tato nastavení:
- Zdroj:
Any
- Cíl:
Internet
- Akce:
Deny
- Zdroj:
Pokud nakonfigurujete privátní koncový bod ve virtuální síti, můžete s tímto pravidlem dál přistupovat k některým službám Azure z toku dat. K tomuto účelu použijte Azure Private Link . Tato služba poskytuje způsob, jak váš provoz cestovat v páteřní síti Microsoftu, aniž by bylo nutné přistupovat k jiné externí síti. NiFi v současné době podporuje Private Link pro procesory Blob Storage a Data Lake Storage. Pokud server NTP (Network Time Protocol) není ve vaší privátní síti dostupný, povolte odchozí přístup k protokolu NTP. Podrobné informace najdete v tématu Synchronizace času pro virtuální počítače s Linuxem v Azure.
Ochrana dat
Bez šifrování drátů, správy identit a přístupu (IAM) nebo šifrování dat je možné provozovat niFi bez nezabezpečeného šifrování. Nejlepší je ale zabezpečit produkční a veřejná cloudová nasazení těmito způsoby:
- Šifrování komunikace pomocí protokolu TLS (Transport Layer Security)
- Použití podporovaného mechanismu ověřování a autorizace
- Šifrování neaktivních uložených dat
Azure Storage poskytuje transparentní šifrování dat na straně serveru. Od verze 1.13.2 ale NiFi ve výchozím nastavení nenakonfiguruje šifrování drátů ani IAM. Toto chování se může v budoucích verzích změnit.
Následující části ukazují, jak zabezpečit nasazení těmito způsoby:
- Povolení šifrování wire pomocí protokolu TLS
- Konfigurace ověřování založeného na certifikátech nebo ID Microsoft Entra
- Správa šifrovaného úložiště v Azure
Šifrování disku
Pokud chcete zlepšit zabezpečení, použijte šifrování disků Azure. Podrobný postup najdete v tématu Šifrování operačního systému a připojených datových disků ve škálovací sadě virtuálních počítačů pomocí Azure CLI. Tento dokument obsahuje také pokyny k poskytnutí vlastního šifrovacího klíče. Následující kroky popisují základní příklad pro NiFi, který funguje pro většinu nasazení:
Pokud chcete zapnout šifrování disků v existující instanci služby Key Vault, použijte následující příkaz Azure CLI:
az keyvault create --resource-group myResourceGroup --name myKeyVaultName --enabled-for-disk-encryption
Zapněte šifrování datových disků škálovací sady virtuálních počítačů pomocí následujícího příkazu:
az vmss encryption enable --resource-group myResourceGroup --name myScaleSet --disk-encryption-keyvault myKeyVaultID --volume-type DATA
Volitelně můžete použít šifrovací klíč klíče (KEK). K šifrování pomocí klíče KEK použijte následující příkaz Azure CLI:
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
Poznámka:
Pokud jste nakonfigurovali škálovací sadu virtuálních počítačů pro ruční režim aktualizace, spusťte update-instances
příkaz. Uveďte verzi šifrovacího klíče, který jste uložili ve službě Key Vault.
Šifrování během přenosu
NiFi podporuje protokol TLS 1.2 pro šifrování během přenosu. Tento protokol nabízí ochranu přístupu uživatelů k uživatelskému rozhraní. Pomocí clusterů protokol chrání komunikaci mezi uzly NiFi. Může také chránit komunikaci se službou ZooKeeper. Když povolíte protokol TLS, NiFi použije pro vzájemné ověřování vzájemné ověřování protokol TLS (mTLS) pro:
- Pokud jste nakonfigurovali tento typ ověřování, ověřování na základě certifikátů
- Veškerá komunikace uvnitřclusteru.
Pokud chcete povolit protokol TLS, proveďte následující kroky:
Vytvořte úložiště klíčů a úložiště důvěryhodnosti pro komunikaci a ověřování mezi klienty a servery.
Konfigurace
$NIFI_HOME/conf/nifi.properties
. Nastavte následující hodnoty:- Názvy hostitelů
- Porty
- Vlastnosti úložiště klíčů
- Vlastnosti úložiště důvěryhodnosti
- Vlastnosti zabezpečení clusteru a ZooKeeper, pokud jsou k dispozici
Nakonfigurujte ověřování v
$NIFI_HOME/conf/authorizers.xml
, obvykle s počátečním uživatelem, který má ověřování na základě certifikátu nebo jinou možnost.Volitelně můžete nakonfigurovat mTLS a zásady čtení proxy serveru mezi niFi a všemi proxy servery, nástroji pro vyrovnávání zatížení nebo externími koncovými body.
Úplný návod najdete v tématu Zabezpečení NiFi pomocí protokolu TLS v dokumentaci k projektu Apache.
Poznámka:
Od verze 1.13.2:
- NiFi ve výchozím nastavení nepovoluje protokol TLS.
- Pro instance NiFi s podporou protokolu TLS s podporou protokolu TLS neexistuje žádná předběžná podpora anonymního přístupu a přístupu s jedním uživatelem.
Pokud chcete protokol TLS povolit pro šifrování během přenosu, nakonfigurujte skupinu uživatelů a poskytovatele zásad pro ověřování a autorizaci v $NIFI_HOME/conf/authorizers.xml
. Další informace najdete v tématu Identita a řízení přístupu dále v tomto článku.
Certifikáty, klíče a úložiště klíčů
Pokud chcete podporovat protokol TLS, vygenerujte certifikáty, uložte je do úložiště klíčů Java a TrustStore a distribuujte je v clusteru NiFi. Pro certifikáty existují dvě obecné možnosti:
- Certifikáty podepsané svým držitelem
- Certifikáty, které certifikují certifikační autority (CA)
U certifikátů podepsaných certifikační autoritou je nejlepší použít zprostředkující certifikační autoritu k vygenerování certifikátů pro uzly v clusteru.
KeyStore a TrustStore jsou kontejnery klíčů a certifikátů na platformě Java. Úložiště klíčů ukládá privátní klíč a certifikát uzlu v clusteru. TrustStore ukládá jeden z následujících typů certifikátů:
- Všechny důvěryhodné certifikáty pro certifikáty podepsané svým držitelem v úložišti klíčů
- Certifikát od certifikační autority pro certifikáty podepsané certifikační autoritou v úložišti klíčů
Při výběru kontejneru mějte na paměti škálovatelnost clusteru NiFi. V budoucnu můžete například chtít zvýšit nebo snížit počet uzlů v clusteru. V takovém případě zvolte certifikáty podepsané certifikační autoritou v úložišti klíčů a jeden nebo více certifikátů z certifikační autority v TrustStore. S touto možností není nutné aktualizovat existující TrustStore v existujících uzlech clusteru. Existující vztah důvěryhodnosti TrustStore a přijímá certifikáty z těchto typů uzlů:
- Uzly, které přidáte do clusteru
- Uzly, které nahrazují ostatní uzly v clusteru
Konfigurace NiFi
Pokud chcete povolit protokol TLS pro NiFi, použijte $NIFI_HOME/conf/nifi.properties
ke konfiguraci vlastností v této tabulce. Ujistěte se, že následující vlastnosti zahrnují název hostitele, který používáte pro přístup k NiFi:
nifi.web.https.host
nebonifi.web.proxy.host
- Určený název certifikátu hostitele nebo alternativní názvy subjektu
Jinak může dojít k selhání ověření názvu hostitele nebo selhání ověření hlavičky HTTP HOST, což vám zamítá přístup.
Název vlastnosti | Popis | Ukázkové hodnoty |
---|---|---|
nifi.web.https.host |
Název hostitele nebo IP adresa, které se mají použít pro uživatelské rozhraní a rozhraní REST API. Tato hodnota by měla být interně přeložitelná. Nedoporučujeme používat veřejně přístupný název. | nifi.internal.cloudapp.net |
nifi.web.https.port |
Port HTTPS, který se má použít pro uživatelské rozhraní a rozhraní REST API. | 9443 (výchozí) |
nifi.web.proxy.host |
Čárkami oddělený seznam alternativních názvů hostitelů, které klienti používají pro přístup k uživatelskému rozhraní a rozhraní REST API. Tento seznam obvykle obsahuje všechny názvy hostitelů, které jsou určené jako alternativní název subjektu (SAN) v certifikátu serveru. Seznam může obsahovat také jakýkoli název hostitele a port, který používá kontroler příchozího přenosu dat Kubernetes, proxy server nebo kontroler příchozího přenosu dat Kubernetes. | 40.67.218.235, 40.67.218.235:443, nifi.westus2.cloudapp.com, nifi.westus2.cloudapp.com:443 |
nifi.security.keystore |
Cesta k úložišti klíčů JKS nebo PKCS12, která obsahuje privátní klíč certifikátu. | ./conf/keystore.jks |
nifi.security.keystoreType |
Typ úložiště klíčů. | JKS nebo PKCS12 |
nifi.security.keystorePasswd |
Heslo úložiště klíčů. | O8SitLBYpCz7g/RpsqH+zM |
nifi.security.keyPasswd |
(Volitelné) Heslo pro privátní klíč. | |
nifi.security.truststore |
Cesta k úložišti důvěryhodnosti JKS nebo PKCS12 obsahující certifikáty nebo certifikáty certifikační autority, které ověřují důvěryhodné uživatele a uzly clusteru. | ./conf/truststore.jks |
nifi.security.truststoreType |
Typ truststore. | JKS nebo PKCS12 |
nifi.security.truststorePasswd |
Heslo truststore. | RJlpGe6/TuN5fG+VnaEPi8 |
nifi.cluster.protocol.is.secure |
Stav protokolu TLS pro komunikaci uvnitřclusteru. Pokud nifi.cluster.is.node ano true , nastavte tuto hodnotu na true povolení protokolu TLS clusteru. |
true |
nifi.remote.input.secure |
Stav protokolu TLS pro komunikaci typu site-to-site. | true |
Následující příklad ukazuje, jak se tyto vlastnosti zobrazují v $NIFI_HOME/conf/nifi.properties
. Všimněte si, že nifi.web.http.host
hodnoty a nifi.web.http.port
hodnoty jsou prázdné.
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
Konfigurace ZooKeeperu
Pokyny k povolení protokolu TLS v Apache ZooKeeper pro komunikaci kvora a klientský přístup najdete v příručce kvora ZooKeeper Správa istrator. Tuto funkci podporují pouze verze 3.5.5 nebo novější.
NiFi používá ZooKeeper ke své koordinaci clusteringu a clusteru s nulovým přehledem. Od verze 1.13.0 podporuje NiFi zabezpečený klientský přístup k instancím ZooKeeper s povoleným protokolem TLS. ZooKeeper ukládá členství v clusteru a stav procesoru v oboru clusteru ve formátu prostého textu. Proto je důležité používat zabezpečený klientský přístup k ZooKeeperu k ověřování požadavků klientů ZooKeeper. Také zašifrujte citlivé hodnoty během přenosu.
Chcete-li povolit protokol TLS pro přístup klienta NiFi k ZooKeeper, nastavte následující vlastnosti v souboru $NIFI_HOME/conf/nifi.properties
. Pokud nastavíte nifi.zookeeper.client.secure
true
bez konfigurace nifi.zookeeper.security
vlastností, NiFi se vrátí do úložiště klíčů a důvěryhodného úložiště, které zadáte v nifi.securityproperties
.
Název vlastnosti | Popis | Ukázkové hodnoty |
---|---|---|
nifi.zookeeper.client.secure |
Stav protokolu TLS klienta při připojování ke službě ZooKeeper. | true |
nifi.zookeeper.security.keystore |
Cesta k úložišti klíčů JKS, PKCS12 nebo PEM, která obsahuje privátní klíč certifikátu, který se zobrazí ZooKeeperu pro ověření. | ./conf/zookeeper.keystore.jks |
nifi.zookeeper.security.keystoreType |
Typ úložiště klíčů. | JKS , PKCS12 , PEM nebo automatické rozpoznávání podle rozšíření |
nifi.zookeeper.security.keystorePasswd |
Heslo úložiště klíčů. | caB6ECKi03R/co+N+64lrz |
nifi.zookeeper.security.keyPasswd |
(Volitelné) Heslo pro privátní klíč. | |
nifi.zookeeper.security.truststore |
Cesta k úložišti důvěryhodnosti JKS, PKCS12 nebo PEM obsahující certifikáty nebo certifikáty certifikační autority, které se používají k ověření ZooKeeperu. | ./conf/zookeeper.truststore.jks |
nifi.zookeeper.security.truststoreType |
Typ truststore. | JKS , PKCS12 , PEM nebo automatické rozpoznávání podle rozšíření |
nifi.zookeeper.security.truststorePasswd |
Heslo truststore. | qBdnLhsp+mKvV7wab/L4sv |
nifi.zookeeper.connect.string |
Připojovací řetězec k hostiteli Nebo kvoru ZooKeeper. Tento řetězec je čárkami oddělený seznam host:port hodnot. secureClientPort Hodnota obvykle není stejná jako clientPort hodnota. Správnou hodnotu najdete v konfiguraci ZooKeeperu. |
zookeeper1.internal.cloudapp.net:2281, zookeeper2.internal.cloudapp.net:2281, zookeeper3.internal.cloudapp.net:2281 |
Následující příklad ukazuje, jak se tyto vlastnosti zobrazují:$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
Další informace o zabezpečení ZooKeeperu pomocí protokolu TLS najdete v průvodci Správa istrace Apache NiFi.
Identita a řízení přístupu
V NiFi se identita a řízení přístupu dosahuje prostřednictvím ověřování a autorizace uživatelů. Pro ověřování uživatelů má NiFi několik možností, ze které si můžete vybrat: Jeden uživatel, LDAP, Kerberos, SAML (Security Assertion Markup Language) a OpenID Připojení (OIDC). Pokud možnost nenakonfigurujete, niFi používá klientské certifikáty k ověřování uživatelů přes PROTOKOL HTTPS.
Pokud uvažujete o vícefaktorovém ověřování, doporučujeme kombinaci ID Microsoft Entra a OIDC. Microsoft Entra ID podporuje jednotné přihlašování nativní pro cloud s využitím OIDC. Díky této kombinaci můžou uživatelé využívat řadu podnikových funkcí zabezpečení:
- Protokolování a upozorňování na podezřelé aktivity z uživatelských účtů
- Monitorování pokusů o přístup k deaktivovaným přihlašovacím údajům
- Upozorňování na neobvyklé chování při přihlašování k účtu
Pro autorizaci niFi poskytuje vynucení založené na zásadách uživatele, skupiny a přístupu. NiFi poskytuje toto vynucení prostřednictvím UserGroupProviders a AccessPolicyProviders. Ve výchozím nastavení poskytovatelé zahrnují File, LDAP, Shell a Azure Graph userGroupProviders. Pomocí AzureGraphUserGroupProvider můžete zdrojové skupiny uživatelů z ID Microsoft Entra. Pak můžete těmto skupinám přiřadit zásady. Pokyny ke konfiguraci najdete v průvodci Správa istrace Apache NiFi.
AccessPolicyProviders, které jsou založené na souborech a Apache Ranger jsou aktuálně k dispozici pro správu a ukládání zásad uživatelů a skupin. Podrobné informace najdete v dokumentaci k Apache NiFi a dokumentaci k Apache Rangeru.
Application Gateway
Application Gateway poskytuje spravovaný nástroj pro vyrovnávání zatížení vrstvy 7 pro rozhraní NiFi. Nakonfigurujte aplikační bránu tak, aby jako back-endový fond používala škálovací sadu virtuálních počítačů uzlů NiFi.
Pro většinu instalací NiFi doporučujeme následující konfiguraci služby Application Gateway :
- Úroveň: Standard
- Velikost skladové položky: střední
- Počet instancí: dva nebo více
Pomocí sondy stavu můžete monitorovat stav webového serveru na každém uzlu. Odeberte uzly, které nejsou v pořádku, z obměny nástroje pro vyrovnávání zatížení. Tento přístup usnadňuje zobrazení uživatelského rozhraní v případě, že celkový cluster není v pořádku. Prohlížeč vás nasměruje jenom na uzly, které jsou aktuálně v pořádku a reagují na požadavky.
Je potřeba zvážit dvě klíčové sondy stavu. Společně poskytují pravidelný prezenčních signálů o celkovém stavu každého uzlu v clusteru. Nakonfigurujte první sondu stavu tak, aby ukazovala na cestu /NiFi
. Tato sonda určuje stav uživatelského rozhraní NiFi na každém uzlu. Nakonfigurujte druhou sondu stavu pro cestu /nifi-api/controller/cluster
. Tato sonda udává, jestli je každý uzel aktuálně v pořádku a je připojený k celkovému clusteru.
Máte dvě možnosti konfigurace front-endové IP adresy služby Application Gateway:
- S veřejnou IP adresou
- S IP adresou privátní podsítě
Pokud uživatelé potřebují získat přístup k uživatelskému rozhraní přes veřejný internet, zahrňte jenom veřejnou IP adresu. Pokud se nevyžaduje veřejný přístup k internetu pro uživatele, přejděte ke front-endu nástroje pro vyrovnávání zatížení z jumpboxu ve virtuální síti nebo prostřednictvím partnerského vztahu k vaší privátní síti. Pokud nakonfigurujete aplikační bránu s veřejnou IP adresou, doporučujeme povolit ověřování klientských certifikátů pro NiFi a povolit tls pro uživatelské rozhraní NiFi. K omezení zdrojových IP adres můžete použít také skupinu zabezpečení sítě v podsíti delegovanou aplikační bránu.
Diagnostika a monitorování stavu
V nastavení diagnostiky služby Application Gateway je k dispozici možnost konfigurace pro odesílání metrik a protokolů přístupu. Pomocí této možnosti můžete tyto informace odeslat z nástroje pro vyrovnávání zatížení na různá místa:
- Účet úložiště
- Event Hubs
- Pracovní prostor služby Log Analytics
Zapnutí tohoto nastavení je užitečné pro ladění problémů s vyrovnáváním zatížení a získání přehledu o stavu uzlů clusteru.
Následující dotaz Log Analytics zobrazuje stav uzlu clusteru v průběhu času z pohledu služby Application Gateway. Podobný dotaz můžete použít k vygenerování výstrah nebo automatizovaných akcí opravy pro uzly, které nejsou v pořádku.
AzureDiagnostics
| summarize UnHealthyNodes = max(unHealthyHostCount_d), HealthyNodes = max(healthyHostCount_d) by bin(TimeGenerated, 5m)
| render timechart
Následující graf výsledků dotazu ukazuje časové zobrazení stavu clusteru:
Dostupnost
Při implementaci tohoto řešení mějte na paměti následující body týkající se dostupnosti:
Load Balancer
Ke zvýšení dostupnosti uživatelského rozhraní během výpadku uzlu použijte nástroj pro vyrovnávání zatížení.
Samostatné virtuální počítače
Pokud chcete zvýšit dostupnost, nasaďte cluster ZooKeeper na samostatné virtuální počítače od virtuálních počítačů v clusteru NiFi. Další informace o konfiguraci ZooKeeperu najdete v tématu Správa stavu v příručce k systému Apache NiFi Správa istrator.
Zóny dostupnosti
Nasaďte škálovací sadu virtuálních počítačů NiFi i cluster ZooKeeper v konfiguraci napříč zónami, abyste maximalizovali dostupnost. Když komunikace mezi uzly v clusteru překročí zóny dostupnosti, představuje malou latenci. Tato latence ale obvykle má minimální celkový vliv na propustnost clusteru.
Škálovací sady virtuálních počítačů
Doporučujeme nasadit uzly NiFi do jedné škálovací sady virtuálních počítačů, která zahrnuje zóny dostupnosti tam, kde jsou k dispozici. Podrobné informace o použití škálovacích sad tímto způsobem najdete v tématu Vytvoření škálovací sady virtuálních počítačů, která používá Zóny dostupnosti.
Sledování
Pro monitorování stavu a výkonu clusteru NiFi je k dispozici několik možností:
- Vytváření sestav.
- MonitoFi, samostatná aplikace vyvinutá Microsoftem MonitoFi běží externě a monitoruje cluster pomocí rozhraní NiFi API.
Monitorování založené na úlohách generování sestav
Pro monitorování můžete použít úlohu generování sestav, kterou nakonfigurujete a spustíte v NiFi. Jak popisuje monitorování diagnostiky a stavu, log Analytics poskytuje úlohu generování sestav v sadě Azure NiFi. Tuto úlohu vytváření sestav můžete použít k integraci monitorování se službou Log Analytics a existujícími systémy monitorování nebo protokolování.
Dotazy Log Analytics
S zahájením práce vám můžou pomoct ukázkové dotazy v následujících částech. Přehled o dotazování dat Log Analytics najdete v tématu Dotazy na protokoly služby Azure Monitor.
Dotazy na protokoly ve službě Monitor a Log Analytics používají verzi dotazovací jazyk Kusto. Mezi dotazy protokolu a dotazy Kusto ale existují rozdíly. Další informace najdete v tématu Přehled dotazů Kusto.
Další strukturované učení najdete v těchto kurzech:
Úloha generování sestav Log Analytics
Ve výchozím nastavení niFi odesílá data metrik do nifimetrics
tabulky. Ve vlastnostech úlohy vytváření sestav ale můžete nakonfigurovat jiný cíl. Úloha generování sestav zachycuje následující metriky NiFi:
Typ metriky | Název metriky |
---|---|
Metriky NiFi | FlowFilesReceived |
Metriky NiFi | FlowFilesSent |
Metriky NiFi | FlowFilesQueued |
Metriky NiFi | BytesReceived |
Metriky NiFi | BytesWritten |
Metriky NiFi | BytesRead |
Metriky NiFi | BytesSent |
Metriky NiFi | BytesQueued |
Metriky stavu portu | InputCount |
Metriky stavu portu | InputBytes |
metriky stavu Připojení | QueuedCount |
metriky stavu Připojení | QueuedBytes |
Metriky stavu portu | OutputCount |
Metriky stavu portu | OutputBytes |
Metriky virtuálních počítačů Java (JVM) | jvm.uptime |
Metriky JVM | jvm.heap_used |
Metriky JVM | jvm.heap_usage |
Metriky JVM | jvm.non_heap_usage |
Metriky JVM | jvm.thread_states.runnable |
Metriky JVM | jvm.thread_states.blocked |
Metriky JVM | jvm.thread_states.timed_waiting |
Metriky JVM | jvm.thread_states.terminated |
Metriky JVM | jvm.thread_count |
Metriky JVM | jvm.daemon_thread_count |
Metriky JVM | jvm.file_descriptor_usage |
Metriky JVM | jvm.gc.runs jvm.gc.runs.g1_old_generation jvm.gc.runs.g1_young_generation |
Metriky JVM | jvm.gc.time jvm.gc.time.g1_young_generation jvm.gc.time.g1_old_generation |
Metriky JVM | jvm.buff_pool_direct_capacity |
Metriky JVM | jvm.buff_pool_direct_count |
Metriky JVM | jvm.buff_pool_direct_mem_used |
Metriky JVM | jvm.buff_pool_mapped_capacity |
Metriky JVM | jvm.buff_pool_mapped_count |
Metriky JVM | jvm.buff_pool_mapped_mem_used |
Metriky JVM | jvm.mem_pool_code_cache |
Metriky JVM | jvm.mem_pool_compressed_class_space |
Metriky JVM | jvm.mem_pool_g1_eden_space |
Metriky JVM | jvm.mem_pool_g1_old_gen |
Metriky JVM | jvm.mem_pool_g1_survivor_space |
Metriky JVM | jvm.mem_pool_metaspace |
Metriky JVM | jvm.thread_states.new |
Metriky JVM | jvm.thread_states.waiting |
Metriky na úrovni procesoru | BytesRead |
Metriky na úrovni procesoru | BytesWritten |
Metriky na úrovni procesoru | FlowFilesReceived |
Metriky na úrovni procesoru | FlowFilesSent |
Tady je ukázkový dotaz pro BytesQueued
metriku clusteru:
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
Tento dotaz vytvoří graf podobný grafu na tomto snímku obrazovky:
Poznámka:
Při spuštění NiFi v Azure nejste omezeni na úlohu generování sestav Log Analytics. NiFi podporuje úlohy vytváření sestav pro mnoho technologií monitorování třetích stran. Seznam podporovaných úloh vytváření sestav najdete v části Úlohy vytváření sestav indexu dokumentace Apache NiFi.
Monitorování infrastruktury NiFi
Kromě úlohy vytváření sestav nainstalujte rozšíření virtuálního počítače Log Analytics na uzly NiFi a ZooKeeper. Toto rozšíření shromažďuje protokoly, další metriky na úrovni virtuálního počítače a metriky z ZooKeeperu.
Vlastní protokoly pro aplikaci NiFi, uživatele, bootstrap a ZooKeeper
Pokud chcete zaznamenat další protokoly, postupujte takto:
Na webu Azure Portal vyberte pracovní prostory služby Log Analytics a pak vyberte svůj pracovní prostor.
V části Nastavení vyberte Vlastní protokoly.
Vyberte Přidat vlastní protokol.
Nastavte vlastní protokol s těmito hodnotami:
- Název:
NiFiAppLogs
- Typ cesty:
Linux
- Název cesty:
/opt/nifi/logs/nifi-app.log
- Název:
Nastavte vlastní protokol s těmito hodnotami:
- Název:
NiFiBootstrapAndUser
- Typ první cesty:
Linux
- Název první cesty:
/opt/nifi/logs/nifi-user.log
- Typ druhé cesty:
Linux
- Název druhé cesty:
/opt/nifi/logs/nifi-bootstrap.log
- Název:
Nastavte vlastní protokol s těmito hodnotami:
- Název:
NiFiZK
- Typ cesty:
Linux
- Název cesty:
/opt/zookeeper/logs/*.out
- Název:
Tady je ukázkový dotaz NiFiAppLogs
vlastní tabulky, kterou vytvořil první příklad:
NiFiAppLogs_CL
| where TimeGenerated > ago(24h)
| where Computer contains {ComputerName} and RawData contains "error"
| limit 10
Tento dotaz vytvoří výsledky podobné následujícím výsledkům:
Konfigurace protokolu infrastruktury
Monitorování můžete použít k monitorování a správě virtuálních počítačů nebo fyzických počítačů. Tyto prostředky můžou být ve vašem místním datacentru nebo jiném cloudovém prostředí. Pokud chcete toto monitorování nastavit, nasaďte agenta Log Analytics. Nakonfigurujte agenta tak, aby se hlásil do pracovního prostoru služby Log Analytics. Další informace najdete v tématu Přehled agenta Log Analytics.
Následující snímek obrazovky ukazuje ukázkovou konfiguraci agenta pro virtuální počítače NiFi. Tabulka Perf
ukládá shromážděná data.
Tady je ukázkový dotaz na protokoly aplikace Perf
NiFi:
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
Tento dotaz vytvoří sestavu jako na tomto snímku obrazovky:
Výstrahy
Pomocí nástroje Monitor můžete vytvářet výstrahy týkající se stavu a výkonu clusteru NiFi. Mezi ukázkové výstrahy patří:
- Celkový počet front překročil prahovou hodnotu.
- Hodnota
BytesWritten
je pod očekávanou prahovou hodnotou. - Hodnota
FlowFilesReceived
je pod prahovou hodnotou. - Cluster není v pořádku.
Další informace o nastavení upozornění ve službě Monitor najdete v tématu Přehled výstrah v Microsoft Azure.
Parametry konfigurace
V následujících částech najdete doporučené, ne výchozí konfigurace pro NiFi a její závislosti, včetně ZooKeeperu a Javy. Tato nastavení jsou vhodná pro velikosti clusterů, které jsou v cloudu možné. Nastavte vlastnosti v následujících konfiguračních souborech:
$NIFI_HOME/conf/nifi.properties
$NIFI_HOME/conf/bootstrap.conf
$ZOOKEEPER_HOME/conf/zoo.cfg
$ZOOKEEPER_HOME/bin/zkEnv.sh
Podrobné informace o dostupných vlastnostech konfigurace a souborech naleznete v příručce apache NiFi system Správa istrator a ZooKeeper Správa istrator průvodce.
NiFi
V případě nasazení Azure zvažte úpravu vlastností v $NIFI_HOME/conf/nifi.properties
. V následující tabulce jsou uvedeny nejdůležitější vlastnosti. Další doporučení a přehledy najdete v seznamech adresátů Apache NiFi.
Parametr | Popis | Výchozí | Doporučení |
---|---|---|---|
nifi.cluster.node.connection.timeout |
Jak dlouho čekat při otevírání připojení k jiným uzlům clusteru | 5 sekund | 60 sekund |
nifi.cluster.node.read.timeout |
Jak dlouho čekat na odpověď při vytváření požadavku na jiné uzly clusteru | 5 sekund | 60 sekund |
nifi.cluster.protocol.heartbeat.interval |
Jak často se prezenční signály posílají zpět do koordinátoru clusteru. | 5 sekund | 60 sekund |
nifi.cluster.node.max.concurrent.requests |
Jakou úroveň paralelismu použít při replikaci volání HTTP, jako jsou volání rozhraní REST API, do jiných uzlů clusteru. | 100 | 500 |
nifi.cluster.node.protocol.threads |
Počáteční velikost fondu vláken pro komunikaci mezi clustery nebo replikovanými komunikacemi | 10 | 50 |
nifi.cluster.node.protocol.max.threads |
Maximální počet vláken, která se mají použít pro komunikaci mezi clustery nebo replikovanými komunikacemi. | 50 | 75 |
nifi.cluster.flow.election.max.candidates |
Počet uzlů, které se mají použít při rozhodování o aktuálním toku Tato hodnota zkratuje hlas na zadaném čísle. | empty | 75 |
nifi.cluster.flow.election.max.wait.time |
Jak dlouho čekat na uzly, než se rozhodnete, co je aktuální tok. | 5 minut | 5 minut |
Chování clusteru
Při konfiguraci clusterů mějte na paměti následující body.
Timeout
Pokud chcete zajistit celkový stav clusteru a jeho uzlů, může být užitečné zvýšit časové limity. Tento postup pomáhá zaručit, že selhání nezpůsobí přechodné problémy se sítí nebo vysoké zatížení.
V distribuovaném systému se výkon jednotlivých systémů liší. Tato varianta zahrnuje síťovou komunikaci a latenci, která obvykle ovlivňuje komunikaci mezi uzly a mezi clustery. Tato varianta může způsobit síťovou infrastrukturu nebo samotný systém. V důsledku toho je pravděpodobnost variace velmi pravděpodobné ve velkých shlukech systémů. V aplikacích Java, které jsou pod zatížením, můžou pozastavení v uvolňování paměti (GC) ve virtuálním počítači Java (JVM) také ovlivnit dobu odezvy požadavků.
Pomocí vlastností v následujících částech nakonfigurujte časové limity tak, aby vyhovovaly potřebám vašeho systému:
nifi.cluster.node.connection.timeout a nifi.cluster.node.read.timeout
Vlastnost nifi.cluster.node.connection.timeout
určuje, jak dlouho se má čekat při otevření připojení. Vlastnost nifi.cluster.node.read.timeout
určuje, jak dlouho se má čekat při příjmu dat mezi požadavky. Výchozí hodnota každé vlastnosti je pět sekund. Tyto vlastnosti platí pro požadavky node-to-node. Zvýšení těchto hodnot pomáhá zmírnit několik souvisejících problémů:
- Odpojení koordinátorem clusteru kvůli přerušení prezenčních signálů
- Selhání získání toku z koordinátora při připojování ke clusteru
- Vytvoření komunikace typu site-to-site (S2S) a vyrovnávání zatížení
Pokud váš cluster nemá velmi malou škálovací sadu, například tři uzly nebo méně, použijte hodnoty, které jsou větší než výchozí hodnoty.
nifi.cluster.protocol.heartbeat.interval
V rámci strategie clusteringu NiFi každý uzel vysílá prezenčních signálů, aby komunikovala svůj stav v pořádku. Uzly ve výchozím nastavení odesílají prezenčních signálů každých pět sekund. Pokud koordinátor clusteru zjistí, že selhalo osm prezenčních signálů v řádku z uzlu, odpojí uzel. Zvyšte interval nastavený ve nifi.cluster.protocol.heartbeat.interval
vlastnosti, aby se přizpůsobil pomalým prezenčním signálům a zabránil tak zbytečnému odpojení uzlů clusteru.
Souběžnost
Ke konfiguraci nastavení souběžnosti použijte vlastnosti v následujících částech:
nifi.cluster.node.protocol.threads a nifi.cluster.node.protocol.max.threads
Vlastnost nifi.cluster.node.protocol.max.threads
určuje maximální počet vláken, která se mají použít pro komunikaci se všemi clustery, jako je vyrovnávání zatížení S2S a agregace uživatelského rozhraní. Výchozí hodnota pro tuto vlastnost je 50 vláken. U velkých clusterů tuto hodnotu zvyšte, abyste zohlednili větší počet požadavků, které tyto operace vyžadují.
Vlastnost nifi.cluster.node.protocol.threads
určuje počáteční velikost fondu vláken. Výchozí hodnota je 10 vláken. Tato hodnota je minimálně. Roste podle potřeby až do maximálního nastaveného nifi.cluster.node.protocol.max.threads
počtu . nifi.cluster.node.protocol.threads
Zvyšte hodnotu pro clustery, které při spuštění používají velkou škálovací sadu.
nifi.cluster.node.max.concurrent.requests
Mnoho požadavků HTTP, jako jsou volání rozhraní REST API a volání uživatelského rozhraní, je potřeba replikovat do jiných uzlů v clusteru. S rostoucí velikostí clusteru se replikuje rostoucí počet požadavků. Vlastnost nifi.cluster.node.max.concurrent.requests
omezuje počet nevyřízených požadavků. Jeho hodnota by měla překročit očekávanou velikost clusteru. Výchozí hodnota je 100 souběžných požadavků. Pokud nepoužíváte malý cluster se třemi nebo méně uzly, zabráníte neúspěšným požadavkům zvýšením této hodnoty.
Volba toku
Ke konfiguraci nastavení voleb toku použijte vlastnosti v následujících částech:
nifi.cluster.flow.election.max.candidates
NiFi používá clustering s nulovou vodicí sadou, což znamená, že neexistuje jeden konkrétní autoritativní uzel. V důsledku toho uzly hlasují o tom, která definice toku se počítá jako správná. Hlasují také o tom, které uzly se připojí ke clusteru.
Ve výchozím nastavení je vlastnost nifi.cluster.flow.election.max.candidates
maximální doba čekání, kterou nifi.cluster.flow.election.max.wait.time
vlastnost určuje. Pokud je tato hodnota příliš vysoká, může být spuštění pomalé. Výchozí hodnota nifi.cluster.flow.election.max.wait.time
je pět minut. Nastavte maximální počet kandidátů na neprázdnou hodnotu, například 1
nebo větší, abyste zajistili, že čekání nebude delší, než je potřeba. Pokud nastavíte tuto vlastnost, přiřaďte jí hodnotu odpovídající velikosti clusteru nebo část většiny očekávané velikosti clusteru. U malých statických clusterů s 10 nebo méně uzly nastavte tuto hodnotu na počet uzlů v clusteru.
nifi.cluster.flow.election.max.wait.time
V elastickém cloudovém prostředí má čas zřizování hostitelů vliv na dobu spuštění aplikace. Vlastnost nifi.cluster.flow.election.max.wait.time
určuje, jak dlouho NiFi čeká před rozhodnutím o toku. Nastavte tuto hodnotu tak, aby odpovídala celkové době spuštění clusteru ve své počáteční velikosti. Při počátečním testování je pět minut ve všech oblastech Azure s doporučenými typy instancí vyšší než odpovídající. Tuto hodnotu ale můžete zvýšit, pokud doba, po kterou se má pravidelně zřizovat, překročí výchozí hodnotu.
Java
Doporučujeme použít verzi LTS javy. Z těchto verzí je Java 11 mírně vhodnější než Java 8, protože Java 11 podporuje rychlejší implementaci uvolňování paměti. Pomocí některé verze je ale možné mít vysoce výkonné nasazení NiFi.
V následujících částech najdete informace o běžných konfiguracích prostředí JVM, které se mají použít při spuštění Rozhraní NiFi. Nastavte parametry JVM v konfiguračním souboru bootstrap na adrese $NIFI_HOME/conf/bootstrap.conf
.
Uvolňování paměti
Pokud používáte Javu 11, ve většině situací doporučujeme použít uvolňování paměti G1 (G1GC). G1GC má lepší výkon oproti ParallelGC, protože G1GC snižuje délku pozastavení GC. G1GC je výchozí v Javě 11, ale můžete ho nakonfigurovat explicitně nastavením následující hodnoty v bootstrap.conf
:
java.arg.13=-XX:+UseG1GC
Pokud používáte Javu 8, nepoužívejte G1GC. Místo toho použijte ParallelGC. V implementaci G1GC v Javě 8 dochází k nedostatkům, které vám brání v jeho používání s doporučenými implementacemi úložiště. ParallelGC je pomalejší než G1GC. Ale s ParallelGC můžete stále mít vysoce výkonné nasazení NiFi s Javou 8.
Halda
Sada vlastností v bootstrap.conf
souboru určuje konfiguraci haldy NiFi JVM. Pro standardní tok nakonfigurujte haldu o velikosti 32 GB pomocí těchto nastavení:
java.arg.3=-Xmx32g
java.arg.2=-Xms32g
Pokud chcete zvolit optimální velikost haldy, která se má použít pro proces JVM, zvažte dva faktory:
- Charakteristiky toku dat
- Způsob, jakým NiFi používá paměť při zpracování
Podrobnou dokumentaci najdete v podrobné dokumentaci k Apache NiFi.
Haldu nastavte tak velké, jak je potřeba, aby splňovala požadavky na zpracování. Tento přístup minimalizuje délku pozastavení GC. Obecné informace o uvolňování paměti Jazyka Java najdete v průvodci laděním uvolňování paměti pro vaši verzi Javy.
Při úpravě nastavení paměti prostředí JVM zvažte tyto důležité faktory:
Počet datových záznamů FlowFiles nebo NiFi, které jsou v daném období aktivní. Toto číslo zahrnuje back-pressured nebo queued FlowFiles.
Počet atributů, které jsou definovány v FlowFiles.
Velikost paměti, kterou procesor vyžaduje ke zpracování konkrétní části obsahu.
Způsob, jakým zpracovatel zpracovává data:
- Streamování dat
- Použití procesorů orientovaných na záznamy
- Uchovávání všech dat v paměti najednou
Tyto podrobnosti jsou důležité. Během zpracování obsahuje NiFi odkazy a atributy pro každý FlowFile v paměti. Ve špičce výkonu je množství paměti, kterou systém používá, úměrné počtu živých flowFiles a všem atributům, které obsahují. Toto číslo zahrnuje soubory FlowFile ve frontě. NiFi se může prohodit na disk. Ale vyhněte se této možnosti, protože to snižuje výkon.
Mějte také na paměti základní využití paměti objektu. Konkrétně z velké haldy nadržte objekty v paměti. Zvažte tyto tipy pro konfiguraci nastavení paměti:
- Spusťte tok se reprezentativními daty a minimálním zpětným tlakem tím, že začnete s nastavením
-Xmx4G
a pak podle potřeby zvýšíte paměť. - Spusťte tok s reprezentativními daty a tlakem ve špičce tím, že začnete s nastavením
-Xmx4G
a pak podle potřeby zvětšujete velikost clusteru. - Profilujte aplikaci, zatímco tok běží, pomocí nástrojů, jako jsou VisualVM a YourKit.
- Pokud konzervativní nárůst haldy výrazně nezlepší výkon, zvažte změnu návrhu toků, procesorů a dalších aspektů systému.
Další parametry prostředí JVM
Následující tabulka uvádí další možnosti prostředí JVM. Poskytuje také hodnoty, které při počátečním testování fungovaly nejlépe. Testy zaznamenaly aktivitu GC a využití paměti a použily pečlivé profilace.
Parametr | Popis | Výchozí prostředí JVM | Doporučení |
---|---|---|---|
InitiatingHeapOccupancyPercent |
Množství haldy, která se používá před aktivací cyklu označení | 45 | 35 |
ParallelGCThreads |
Počet vláken, která GC používá. Tato hodnota je omezena, aby se omezil celkový účinek na systém. | 5/8 počtu vCPU | 8 |
ConcGCThreads |
Počet vláken GC, která se mají spustit paralelně. Tato hodnota se zvýší, aby se zohlednila omezení ParallelGCThreads. | 1/4 hodnoty ParallelGCThreads |
4 |
G1ReservePercent |
Procento rezervované paměti, které chcete zachovat volné. Tato hodnota se zvyšuje, aby nedocházelo k vyčerpání prostoru, což pomáhá vyhnout se úplnému uvolňování paměti. | 10 | 20 |
UseStringDeduplication |
Zda se chcete pokusit identifikovat a zrušit duplicitní odkazy na identické řetězce. Zapnutí této funkce může vést k úsporám paměti. | - | Přítomen |
Nakonfigurujte tato nastavení přidáním následujících položek do NiFi bootstrap.conf
:
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
Pokud chcete zlepšit odolnost proti chybám, spusťte ZooKeeper jako cluster. Tento přístup vezměte i v případě, že většina nasazení NiFi představuje relativně skromné zatížení ZooKeeperu. Zapněte clustering pro ZooKeeper explicitně. Ve výchozím nastavení se ZooKeeper spouští v režimu s jedním serverem. Podrobné informace naleznete v části Nastavení clusteru (multi-server) v příručce zooKeeper Správa istrator.
S výjimkou nastavení clusteringu použijte výchozí hodnoty pro konfiguraci ZooKeeper.
Pokud máte velký cluster NiFi, možná budete muset použít větší počet serverů ZooKeeper. Pro menší velikosti clusterů stačí menší velikosti virtuálních počítačů a spravované disky SSD úrovně Standard.
Přispěvatelé
Tento článek spravuje Microsoft. Původně byla napsána následujícími přispěvateli.
Hlavní autor:
- Muazma Zahid | Hlavní manažer pm
Pokud chcete zobrazit neveřejné profily LinkedIn, přihlaste se na LinkedIn.
Další kroky
Materiály a doporučení v tomto dokumentu pocházejí z několika zdrojů:
- Experimentování
- Osvědčené postupy Azure
- Znalost komunity NiFi, osvědčené postupy a dokumentace
Další informace naleznete v následujících zdrojích:
- Příručka k systému Apache NiFi Správa istrator
- Seznamy adresátů Apache NiFi
- Osvědčené postupy cloudera pro nastavení vysoce výkonné instalace NiFi
- Azure Premium Storage: Návrh pro zajištění vysokého výkonu
- Řešení potíží s výkonem virtuálních počítačů Azure v Linuxu nebo Windows
Související prostředky
- Monitorování Apache NiFi pomocí MonitoFi
- Nasazení založená na Helmu pro Apache NiFi
- Monitorování Azure Data Exploreru
- [Hybridní extrakce, transformace, načítání (ETL) se službou Azure Data Factory] [Hybridní ETL se službou Azure Data Factory]
- [DataOps pro moderní datový sklad] [DataOps pro moderní datový sklad]
- Datové sklady a analýzy