ETL工具-nifi乾貨系列 第十四講 nifi處理器PublishKafka實戰教程

1、kettle的kafka生產者叫kafka producer,nifi中的相應處理器爲PublishKafka,如下圖所示:

可以很清楚的看到PublishKafka處理器支持多個版本的kafka,選擇時要根據自己的kafka 版本選擇相匹配的PublishKafka處理器,由於本人使用的是kafka2.x,所以這裏選擇PublishKafka_2_0處理器。

處理器xxxRecord和xxx的區別,如PublishKafka和PublishKafkaRecord:

處理器xxx:將整個 FlowFile 中的內容作爲一個消息進行發送,

xxxxxxRecord:將 FlowFile 中的內容拆分成多個記錄(或行),然後將每個記錄作爲一個單獨的消息進行發送。

2、flow demo 設計,如下圖所示:

GenerateFlowFile:產生自定義數據“我是java小金剛”

PublishKafka:將“我是java小金剛”寫入kafka。

LogMessage:打印消息。

 3、處理器PublishKafka屬性配置,如下圖所示:

 Kafka Brokers:以 host:port 格式表示的 Kafka Broker,集羣列表通過逗號,如192.168.101.5:9092,192.168.101.6:9092

Security Protocol: 用於與代理通信的安全協議。對應於 Kafka 客戶端的 security.protocol 屬性。這裏我們使用默認值PLAINTEXT

SASL Mechanism:用於認證的 SASL 機制。對應於 Kafka 客戶端的 sasl.mechanism 屬性。這裏我們使用默認值GSSAPI

Kerberos Service Name:與broker JAAS 配置中配置的 Kafka 服務器的主要名稱匹配的服務名稱。

Kerberos Credentials Service:支持使用 Kerberos 進行通用憑證認證的服務。

Kerberos Principal:用於與 Kerberos 進行身份驗證的主體。

Kerberos Keytab:用於與 Kerberos 進行身份驗證的 Keytab 憑據,這個屬性需要提供一個文件。

SSL Context Service:支持與 Kafka brokers 進行 SSL 通信的服務。

Topic Name:要發佈到的 Kafka 主題的名稱。

Delivery Guarantee:指定確保消息發送到 Kafka 的要求。對應於 Kafka 的 'acks' 屬性。根據具體情況選擇,這裏使用默認值。

Failure Strategy:如果處理器無法將數據發佈到 Kafka,指定處理流文件的方式。有Route to Failure 、Rollback 兩個選項。

Use Transactions:指定在與 Kafka 通信時,NiFi 是否應提供事務性保證。

 

 

 Transactional Id Prefix:當 "Use Transaction" 設置爲 true 時,KafkaProducer 配置 'transactional.id' 將生成一個 UUID,並以此字符串爲前綴。

Attributes to Send as Headers (Regex):匹配所有 FlowFile 屬性名稱的正則表達式。任何名稱與 regex 匹配的屬性將作爲標頭添加到 Kafka 消息中。如果未指定,則不會將任何 FlowFile 屬性添加爲標頭。

Message Header Encoding:對於作爲消息標頭添加的任何屬性,通過 <Attributes to Send as Headers> 屬性配置,此屬性指示用於序列化標頭的字符編碼。

Kafka Key:消息的密鑰。如果未指定,則如果存在流文件屬性 'kafka.key',則將其用作消息密鑰。請注意,同時設置 Kafka 密鑰和分隔符可能會導致具有相同密鑰的許多 Kafka 消息。通常情況下,這不是問題,因爲 Kafka 不強制執行或假設消息和密鑰的唯一性。但是,同時設置分隔符和 Kafka 密鑰可能會導致 Kafka 上的數據丟失風險。在 Kafka 上進行主題壓縮期間,將根據此密鑰對消息進行去重。

Key Attribute Encoding:發出的FlowFiles具有一個名爲'kafka.key'的屬性。此屬性規定了該屬性值應如何編碼。這是使用默認值。

Message Demarcator:指定用於在單個FlowFile中分隔多個消息的字符串(解釋爲UTF-8)。如果未指定,則將整個FlowFile內容用作單個消息。如果指定了分隔符,則將FlowFile內容拆分爲此分隔符,並將每個部分作爲單獨的Kafka消息發送。要輸入特殊字符,如'換行符',請使用CTRL+Enter或Shift+Enter,取決於您的操作系統。

Max Request Size:請求的最大大小,以字節爲單位。對應於Kafka的'max.request.size'屬性,默認爲1 MB(1048576字節)。

Acknowledgment Wait Time:發送消息到Kafka後,這指示我們願意等待從Kafka收到響應的時間量。如果Kafka在此時間段內未確認消息,FlowFile將被路由到'failure'。

Max Metadata Wait Time:發佈者在執行“發送”調用期間等待獲取元數據或等待緩衝區在“發送”調用之前刷新的時間量,超過此時間將導致整個“發送”調用失敗。對應於Kafka的'max.block.ms'屬性。

Partitioner class:指定用於計算消息分區ID的類。對應於Kafka的'partitioner.class'屬性。

Partition:指定哪些分區記錄將會發送消息。

Compression Type:這個參數允許你爲此生產者生成的所有數據指定壓縮編解碼器。

動態屬性:如kafka用戶名和密碼:Username、Password。

4、運行nifi flow,通過kafka-ui 查看kafka中的數據,如下圖所示:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章