From 107b6d15628879cd60c3f6e59d01341a40423f13 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:45:43 +0200 Subject: [PATCH 1/8] move nifi flow json definition to config map (and fix bootstrap.servers) --- .../IngestEarthquakesToKafka.json | 1 - .../create-nifi-ingestion-job.yaml | 21 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) delete mode 100644 demos/nifi-kafka-druid-earthquake-data/IngestEarthquakesToKafka.json diff --git a/demos/nifi-kafka-druid-earthquake-data/IngestEarthquakesToKafka.json b/demos/nifi-kafka-druid-earthquake-data/IngestEarthquakesToKafka.json deleted file mode 100644 index 1e30d720..00000000 --- a/demos/nifi-kafka-druid-earthquake-data/IngestEarthquakesToKafka.json +++ /dev/null @@ -1 +0,0 @@ -{ "flowContents": { "identifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "instanceIdentifier": "a52fc536-0195-1000-ffff-ffffb77a46e7", "name": "IngestEarthquakesToKafka_raw", "comments": "", "position": { "x": -408.0, "y": -176.0 }, "processGroups": [], "remoteProcessGroups": [], "processors": [ { "identifier": "6f74b992-9f25-3fa8-ada3-eebe335159b3", "instanceIdentifier": "a5301fb3-0195-1000-0000-0000734e0ae7", "name": "SplitRecord", "comments": "", "position": { "x": 472.0, "y": 376.0 }, "type": "org.apache.nifi.processors.standard.SplitRecord", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Record Writer": "5e81a80d-728d-3c87-800e-aa957618da55", "Record Reader": "d082021f-5f72-322a-8e1d-c5990d04b2b1", "Records Per Split": "2000" }, "propertyDescriptors": { "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Records Per Split": { "name": "Records Per Split", "displayName": "Records Per Split", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "original", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "e29d8c86-db41-3f3e-9ba7-bffeaefcade6", "instanceIdentifier": "d86d6b2e-ed8f-3d61-9200-5c02c0918eec", "name": "InvokeHTTP", "comments": "", "position": { "x": 473.00000076287904, "y": 142.99998844850802 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://repo.stackable.tech/repository/misc/earthquake-data/earthquakes_1950_to_2022.csv", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "true", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "365000 days", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "cd097bd8-d55f-3685-b63f-56d46d14c251", "instanceIdentifier": "2ab64ebf-3492-348b-8b9a-7a97e920220f", "name": "PublishKafka", "comments": "", "position": { "x": 472.0, "y": 608.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "none", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "d082021f-5f72-322a-8e1d-c5990d04b2b1", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "earthquakes", "Kafka Key": null, "partition": null, "Kafka Connection Service": "db258647-11aa-30c5-a8c6-a49a4296cf19", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f3254a5e-0024-31c3-b59a-9edff2a099c9", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" } ], "inputPorts": [], "outputPorts": [], "connections": [ { "identifier": "4a16d5e1-b4fa-3018-ba09-504a16238421", "instanceIdentifier": "64b996e2-f357-34fe-aee6-e24d6fd201e4", "name": "", "source": { "id": "e29d8c86-db41-3f3e-9ba7-bffeaefcade6", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "InvokeHTTP", "comments": "", "instanceIdentifier": "d86d6b2e-ed8f-3d61-9200-5c02c0918eec" }, "destination": { "id": "6f74b992-9f25-3fa8-ada3-eebe335159b3", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "SplitRecord", "comments": "", "instanceIdentifier": "a5301fb3-0195-1000-0000-0000734e0ae7" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10000, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "1025098e-3c22-37c0-9560-203bc51ef427", "instanceIdentifier": "a530ccd7-0195-1000-0000-00004ed00e40", "name": "", "source": { "id": "6f74b992-9f25-3fa8-ada3-eebe335159b3", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "SplitRecord", "comments": "", "instanceIdentifier": "a5301fb3-0195-1000-0000-0000734e0ae7" }, "destination": { "id": "cd097bd8-d55f-3685-b63f-56d46d14c251", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "PublishKafka", "comments": "", "instanceIdentifier": "2ab64ebf-3492-348b-8b9a-7a97e920220f" }, "labelIndex": 0, "zIndex": 0, "selectedRelationships": [ "splits" ], "backPressureObjectThreshold": 10000, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" } ], "labels": [], "funnels": [], "controllerServices": [ { "identifier": "db258647-11aa-30c5-a8c6-a49a4296cf19", "instanceIdentifier": "d22c6c6b-4cd7-354f-b5d4-ba93b975ec64", "name": "Kafka3ConnectionService", "comments": "", "type": "org.apache.nifi.kafka.service.Kafka3ConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-3-service-nar", "version": "2.6.0" }, "properties": { "security.protocol": "SSL", "SSL Context Service": "7fce889c-fc16-3f69-b7b4-44a90a81ae38", "ack.wait.time": "5 sec", "sasl.username": null, "max.poll.records": "10000", "sasl.mechanism": "GSSAPI", "isolation.level": "read_committed", "max.block.ms": "5 sec", "bootstrap.servers": "kafka-broker-default.default.svc.cluster.local:9093", "kerberos-user-service": null, "sasl.kerberos.service.name": null, "default.api.timeout.ms": "60 sec" }, "propertyDescriptors": { "ack.wait.time": { "name": "ack.wait.time", "displayName": "Acknowledgment Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.username": { "name": "sasl.username", "displayName": "SASL Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.poll.records": { "name": "max.poll.records", "displayName": "Max Poll Records", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "bootstrap.servers": { "name": "bootstrap.servers", "displayName": "Bootstrap Servers", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.kerberos.service.name": { "name": "sasl.kerberos.service.name", "displayName": "Kerberos Service Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "security.protocol": { "name": "security.protocol", "displayName": "Security Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.mechanism": { "name": "sasl.mechanism", "displayName": "SASL Mechanism", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "isolation.level": { "name": "isolation.level", "displayName": "Transaction Isolation Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.block.ms": { "name": "max.block.ms", "displayName": "Max Metadata Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "kerberos-user-service": { "name": "kerberos-user-service", "displayName": "Kerberos User Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.password": { "name": "sasl.password", "displayName": "SASL Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "default.api.timeout.ms": { "name": "default.api.timeout.ms", "displayName": "Client Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.kafka.service.api.KafkaConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-service-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "d082021f-5f72-322a-8e1d-c5990d04b2b1", "instanceIdentifier": "ab119a98-0d96-3556-b54f-411fd9cdd462", "name": "CSVReader", "type": "org.apache.nifi.csv.CSVReader", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "ignore-csv-header": "false", "schema-branch": null, "Trim double quote": "true", "CSV Format": "custom", "Quote Character": "\"", "csvutils-allow-duplicate-header-names": "true", "Value Separator": ",", "Record Separator": "\\n", "Timestamp Format": null, "Escape Character": "\\", "Date Format": null, "Null String": null, "Skip Header Line": "false", "Trim Fields": "true", "schema-name": "${schema.name}", "schema-registry": null, "csv-reader-csv-parser": "commons-csv", "Time Format": null, "Comment Marker": null, "schema-access-strategy": "infer-schema", "schema-version": null, "csvutils-character-set": "UTF-8", "schema-text": "${avro.schema}" }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "ignore-csv-header": { "name": "ignore-csv-header", "displayName": "Ignore CSV Header Column Names", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Trim double quote": { "name": "Trim double quote", "displayName": "Trim double quote", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "CSV Format": { "name": "CSV Format", "displayName": "CSV Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Quote Character": { "name": "Quote Character", "displayName": "Quote Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csvutils-allow-duplicate-header-names": { "name": "csvutils-allow-duplicate-header-names", "displayName": "Allow Duplicate Header Names", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Value Separator": { "name": "Value Separator", "displayName": "Value Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Separator": { "name": "Record Separator", "displayName": "Record Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Escape Character": { "name": "Escape Character", "displayName": "Escape Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null String": { "name": "Null String", "displayName": "Null String", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Skip Header Line": { "name": "Skip Header Line", "displayName": "Treat First Line as Header", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Trim Fields": { "name": "Trim Fields", "displayName": "Trim Fields", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "csv-reader-csv-parser": { "name": "csv-reader-csv-parser", "displayName": "CSV Parser", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Comment Marker": { "name": "Comment Marker", "displayName": "Comment Marker", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csvutils-character-set": { "name": "csvutils-character-set", "displayName": "Character Set", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordReaderFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "7fce889c-fc16-3f69-b7b4-44a90a81ae38", "instanceIdentifier": "3238df43-ee04-3bec-aa9b-13efe7c0f72a", "name": "StandardRestrictedSSLContextService", "comments": "", "type": "org.apache.nifi.ssl.StandardRestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-ssl-context-service-nar", "version": "2.6.0" }, "properties": { "Truststore Type": "PKCS12", "Truststore Password": "secret", "SSL Protocol": "TLSv1.3", "Keystore Type": "PKCS12", "Keystore Password": "secret", "Truststore Filename": "/stackable/keystore/truststore.p12", "Keystore Filename": "/stackable/keystore/keystore.p12" }, "propertyDescriptors": { "Truststore Type": { "name": "Truststore Type", "displayName": "Truststore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Protocol": { "name": "SSL Protocol", "displayName": "TLS Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Keystore Type": { "name": "Keystore Type", "displayName": "Keystore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Truststore Filename": { "name": "Truststore Filename", "displayName": "Truststore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } }, "Keystore Password": { "name": "Keystore Password", "displayName": "Keystore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "key-password": { "name": "key-password", "displayName": "Key Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Truststore Password": { "name": "Truststore Password", "displayName": "Truststore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Keystore Filename": { "name": "Keystore Filename", "displayName": "Keystore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } } }, "controllerServiceApis": [ { "type": "org.apache.nifi.ssl.SSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.RestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.SSLContextProvider", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "f3254a5e-0024-31c3-b59a-9edff2a099c9", "instanceIdentifier": "8dd599ec-3c90-3a34-8213-185a6d1bfb92", "name": "JsonRecordSetWriter", "type": "org.apache.nifi.json.JsonRecordSetWriter", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "Allow Scientific Notation": "false", "compression-level": "1", "schema-cache": null, "Timestamp Format": null, "Date Format": null, "Pretty Print JSON": "false", "compression-format": "none", "Schema Write Strategy": "no-schema", "suppress-nulls": "never-suppress", "output-grouping": "output-array", "schema-name": "${schema.name}", "schema-registry": null, "Time Format": null, "schema-access-strategy": "inherit-record-schema", "schema-version": null, "schema-text": "${avro.schema}", "Schema Reference Writer": null }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Allow Scientific Notation": { "name": "Allow Scientific Notation", "displayName": "Allow Scientific Notation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-level": { "name": "compression-level", "displayName": "Compression Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-cache": { "name": "schema-cache", "displayName": "Schema Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Pretty Print JSON": { "name": "Pretty Print JSON", "displayName": "Pretty Print JSON", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-format": { "name": "compression-format", "displayName": "Compression Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Write Strategy": { "name": "Schema Write Strategy", "displayName": "Schema Write Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "suppress-nulls": { "name": "suppress-nulls", "displayName": "Suppress Null Values", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "output-grouping": { "name": "output-grouping", "displayName": "Output Grouping", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Reference Writer": { "name": "Schema Reference Writer", "displayName": "Schema Reference Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordSetWriterFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "5e81a80d-728d-3c87-800e-aa957618da55", "instanceIdentifier": "a53045c6-0195-1000-ffff-ffffef6c13db", "name": "CSVRecordSetWriter", "comments": "", "type": "org.apache.nifi.csv.CSVRecordSetWriter", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "CSV Format": "custom", "Include Header Line": "true", "schema-cache": null, "Escape Character": "\\", "Date Format": null, "Null String": null, "Trim Fields": "true", "schema-registry": null, "Time Format": null, "Comment Marker": null, "schema-access-strategy": "inherit-record-schema", "schema-version": null, "csvutils-character-set": "UTF-8", "schema-text": "${avro.schema}", "csv-writer": "commons-csv", "Quote Character": "\"", "Value Separator": ",", "Record Separator": "\\n", "Timestamp Format": null, "Schema Write Strategy": "no-schema", "schema-name": "${schema.name}", "Quote Mode": "MINIMAL", "Schema Reference Writer": null, "Include Trailing Delimiter": "false" }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "CSV Format": { "name": "CSV Format", "displayName": "CSV Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Include Header Line": { "name": "Include Header Line", "displayName": "Include Header Line", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-cache": { "name": "schema-cache", "displayName": "Schema Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Escape Character": { "name": "Escape Character", "displayName": "Escape Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null String": { "name": "Null String", "displayName": "Null String", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Trim Fields": { "name": "Trim Fields", "displayName": "Trim Fields", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Comment Marker": { "name": "Comment Marker", "displayName": "Comment Marker", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csvutils-character-set": { "name": "csvutils-character-set", "displayName": "Character Set", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csv-writer": { "name": "csv-writer", "displayName": "CSV Writer", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Quote Character": { "name": "Quote Character", "displayName": "Quote Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Value Separator": { "name": "Value Separator", "displayName": "Value Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Separator": { "name": "Record Separator", "displayName": "Record Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Write Strategy": { "name": "Schema Write Strategy", "displayName": "Schema Write Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Quote Mode": { "name": "Quote Mode", "displayName": "Quote Mode", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Reference Writer": { "name": "Schema Reference Writer", "displayName": "Schema Reference Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Include Trailing Delimiter": { "name": "Include Trailing Delimiter", "displayName": "Include Trailing Delimiter", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordSetWriterFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" } ], "defaultFlowFileExpiration": "0 sec", "defaultBackPressureObjectThreshold": 10000, "defaultBackPressureDataSizeThreshold": "1 GB", "scheduledState": "ENABLED", "executionEngine": "INHERITED", "maxConcurrentTasks": 1, "statelessFlowTimeout": "1 min", "flowFileConcurrency": "UNBOUNDED", "flowFileOutboundPolicy": "STREAM_WHEN_AVAILABLE", "componentType": "PROCESS_GROUP" }, "externalControllerServices": {}, "parameterContexts": {}, "flowEncodingVersion": "1.0", "parameterProviders": {}, "latest": false } diff --git a/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml b/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml index 306e42cf..c59b2698 100644 --- a/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml +++ b/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml @@ -32,6 +32,8 @@ spec: volumeMounts: - name: script mountPath: /tmp/script + - name: flow + mountPath: /tmp/flow - name: nifi-admin-credentials-secret mountPath: /nifi-admin-credentials-secret env: @@ -43,6 +45,9 @@ spec: - name: script configMap: name: create-nifi-ingestion-job-script + - name: flow + configMap: + name: ingest-earthquake-data-flow - name: nifi-admin-credentials-secret secret: secretName: nifi-admin-credentials-secret @@ -76,11 +81,6 @@ data: service_login(username=USERNAME, password=PASSWORD) print("Logged in") - response = requests.get("https://raw.githubusercontent.com/stackabletech/demos/refs/heads/main/demos/nifi-kafka-druid-earthquake-data/IngestEarthquakesToKafka.json") - filename = "/tmp/IngestEarthquakesToKafka.json" - with open(filename, "wb") as f: - f.write(response.content) - pg_id = get_root_pg_id() if not nipyapi.config.nifi_config.api_client: @@ -102,7 +102,7 @@ data: ('clientId', nipyapi.nifi.FlowApi().generate_client_id()), ], files={ - 'file': filename + 'file': "/tmp/flow/IngestEarthquakesToKafka.json" }, auth_settings=['tokenAuth']) @@ -122,3 +122,12 @@ data: print(f"Failed to schedule controller {controller.component.name}: {e}") schedule_process_group(pg_id, scheduled=True) +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: ingest-earthquake-data-flow + namespace: default +data: + IngestEarthquakesToKafka.json: | + { "flowContents": { "identifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "instanceIdentifier": "a52fc536-0195-1000-ffff-ffffb77a46e7", "name": "IngestEarthquakesToKafka_raw", "comments": "", "position": { "x": -408.0, "y": -176.0 }, "processGroups": [], "remoteProcessGroups": [], "processors": [ { "identifier": "6f74b992-9f25-3fa8-ada3-eebe335159b3", "instanceIdentifier": "a5301fb3-0195-1000-0000-0000734e0ae7", "name": "SplitRecord", "comments": "", "position": { "x": 472.0, "y": 376.0 }, "type": "org.apache.nifi.processors.standard.SplitRecord", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Record Writer": "5e81a80d-728d-3c87-800e-aa957618da55", "Record Reader": "d082021f-5f72-322a-8e1d-c5990d04b2b1", "Records Per Split": "2000" }, "propertyDescriptors": { "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Records Per Split": { "name": "Records Per Split", "displayName": "Records Per Split", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "original", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "e29d8c86-db41-3f3e-9ba7-bffeaefcade6", "instanceIdentifier": "d86d6b2e-ed8f-3d61-9200-5c02c0918eec", "name": "InvokeHTTP", "comments": "", "position": { "x": 473.00000076287904, "y": 142.99998844850802 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://repo.stackable.tech/repository/misc/earthquake-data/earthquakes_1950_to_2022.csv", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "true", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "365000 days", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "cd097bd8-d55f-3685-b63f-56d46d14c251", "instanceIdentifier": "2ab64ebf-3492-348b-8b9a-7a97e920220f", "name": "PublishKafka", "comments": "", "position": { "x": 472.0, "y": 608.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "none", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "d082021f-5f72-322a-8e1d-c5990d04b2b1", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "earthquakes", "Kafka Key": null, "partition": null, "Kafka Connection Service": "db258647-11aa-30c5-a8c6-a49a4296cf19", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f3254a5e-0024-31c3-b59a-9edff2a099c9", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" } ], "inputPorts": [], "outputPorts": [], "connections": [ { "identifier": "4a16d5e1-b4fa-3018-ba09-504a16238421", "instanceIdentifier": "64b996e2-f357-34fe-aee6-e24d6fd201e4", "name": "", "source": { "id": "e29d8c86-db41-3f3e-9ba7-bffeaefcade6", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "InvokeHTTP", "comments": "", "instanceIdentifier": "d86d6b2e-ed8f-3d61-9200-5c02c0918eec" }, "destination": { "id": "6f74b992-9f25-3fa8-ada3-eebe335159b3", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "SplitRecord", "comments": "", "instanceIdentifier": "a5301fb3-0195-1000-0000-0000734e0ae7" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10000, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "1025098e-3c22-37c0-9560-203bc51ef427", "instanceIdentifier": "a530ccd7-0195-1000-0000-00004ed00e40", "name": "", "source": { "id": "6f74b992-9f25-3fa8-ada3-eebe335159b3", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "SplitRecord", "comments": "", "instanceIdentifier": "a5301fb3-0195-1000-0000-0000734e0ae7" }, "destination": { "id": "cd097bd8-d55f-3685-b63f-56d46d14c251", "type": "PROCESSOR", "groupId": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4", "name": "PublishKafka", "comments": "", "instanceIdentifier": "2ab64ebf-3492-348b-8b9a-7a97e920220f" }, "labelIndex": 0, "zIndex": 0, "selectedRelationships": [ "splits" ], "backPressureObjectThreshold": 10000, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" } ], "labels": [], "funnels": [], "controllerServices": [ { "identifier": "db258647-11aa-30c5-a8c6-a49a4296cf19", "instanceIdentifier": "d22c6c6b-4cd7-354f-b5d4-ba93b975ec64", "name": "Kafka3ConnectionService", "comments": "", "type": "org.apache.nifi.kafka.service.Kafka3ConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-3-service-nar", "version": "2.6.0" }, "properties": { "security.protocol": "SSL", "SSL Context Service": "7fce889c-fc16-3f69-b7b4-44a90a81ae38", "ack.wait.time": "5 sec", "sasl.username": null, "max.poll.records": "10000", "sasl.mechanism": "GSSAPI", "isolation.level": "read_committed", "max.block.ms": "5 sec", "bootstrap.servers": "kafka-broker-default-headless.default.svc.cluster.local:9093", "kerberos-user-service": null, "sasl.kerberos.service.name": null, "default.api.timeout.ms": "60 sec" }, "propertyDescriptors": { "ack.wait.time": { "name": "ack.wait.time", "displayName": "Acknowledgment Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.username": { "name": "sasl.username", "displayName": "SASL Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.poll.records": { "name": "max.poll.records", "displayName": "Max Poll Records", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "bootstrap.servers": { "name": "bootstrap.servers", "displayName": "Bootstrap Servers", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.kerberos.service.name": { "name": "sasl.kerberos.service.name", "displayName": "Kerberos Service Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "security.protocol": { "name": "security.protocol", "displayName": "Security Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.mechanism": { "name": "sasl.mechanism", "displayName": "SASL Mechanism", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "isolation.level": { "name": "isolation.level", "displayName": "Transaction Isolation Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.block.ms": { "name": "max.block.ms", "displayName": "Max Metadata Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "kerberos-user-service": { "name": "kerberos-user-service", "displayName": "Kerberos User Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.password": { "name": "sasl.password", "displayName": "SASL Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "default.api.timeout.ms": { "name": "default.api.timeout.ms", "displayName": "Client Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.kafka.service.api.KafkaConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-service-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "d082021f-5f72-322a-8e1d-c5990d04b2b1", "instanceIdentifier": "ab119a98-0d96-3556-b54f-411fd9cdd462", "name": "CSVReader", "type": "org.apache.nifi.csv.CSVReader", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "ignore-csv-header": "false", "schema-branch": null, "Trim double quote": "true", "CSV Format": "custom", "Quote Character": "\"", "csvutils-allow-duplicate-header-names": "true", "Value Separator": ",", "Record Separator": "\\n", "Timestamp Format": null, "Escape Character": "\\", "Date Format": null, "Null String": null, "Skip Header Line": "false", "Trim Fields": "true", "schema-name": "${schema.name}", "schema-registry": null, "csv-reader-csv-parser": "commons-csv", "Time Format": null, "Comment Marker": null, "schema-access-strategy": "infer-schema", "schema-version": null, "csvutils-character-set": "UTF-8", "schema-text": "${avro.schema}" }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "ignore-csv-header": { "name": "ignore-csv-header", "displayName": "Ignore CSV Header Column Names", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Trim double quote": { "name": "Trim double quote", "displayName": "Trim double quote", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "CSV Format": { "name": "CSV Format", "displayName": "CSV Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Quote Character": { "name": "Quote Character", "displayName": "Quote Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csvutils-allow-duplicate-header-names": { "name": "csvutils-allow-duplicate-header-names", "displayName": "Allow Duplicate Header Names", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Value Separator": { "name": "Value Separator", "displayName": "Value Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Separator": { "name": "Record Separator", "displayName": "Record Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Escape Character": { "name": "Escape Character", "displayName": "Escape Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null String": { "name": "Null String", "displayName": "Null String", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Skip Header Line": { "name": "Skip Header Line", "displayName": "Treat First Line as Header", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Trim Fields": { "name": "Trim Fields", "displayName": "Trim Fields", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "csv-reader-csv-parser": { "name": "csv-reader-csv-parser", "displayName": "CSV Parser", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Comment Marker": { "name": "Comment Marker", "displayName": "Comment Marker", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csvutils-character-set": { "name": "csvutils-character-set", "displayName": "Character Set", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordReaderFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "7fce889c-fc16-3f69-b7b4-44a90a81ae38", "instanceIdentifier": "3238df43-ee04-3bec-aa9b-13efe7c0f72a", "name": "StandardRestrictedSSLContextService", "comments": "", "type": "org.apache.nifi.ssl.StandardRestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-ssl-context-service-nar", "version": "2.6.0" }, "properties": { "Truststore Type": "PKCS12", "Truststore Password": "secret", "SSL Protocol": "TLSv1.3", "Keystore Type": "PKCS12", "Keystore Password": "secret", "Truststore Filename": "/stackable/keystore/truststore.p12", "Keystore Filename": "/stackable/keystore/keystore.p12" }, "propertyDescriptors": { "Truststore Type": { "name": "Truststore Type", "displayName": "Truststore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Protocol": { "name": "SSL Protocol", "displayName": "TLS Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Keystore Type": { "name": "Keystore Type", "displayName": "Keystore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Truststore Filename": { "name": "Truststore Filename", "displayName": "Truststore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } }, "Keystore Password": { "name": "Keystore Password", "displayName": "Keystore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "key-password": { "name": "key-password", "displayName": "Key Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Truststore Password": { "name": "Truststore Password", "displayName": "Truststore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Keystore Filename": { "name": "Keystore Filename", "displayName": "Keystore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } } }, "controllerServiceApis": [ { "type": "org.apache.nifi.ssl.SSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.RestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.SSLContextProvider", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "f3254a5e-0024-31c3-b59a-9edff2a099c9", "instanceIdentifier": "8dd599ec-3c90-3a34-8213-185a6d1bfb92", "name": "JsonRecordSetWriter", "type": "org.apache.nifi.json.JsonRecordSetWriter", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "Allow Scientific Notation": "false", "compression-level": "1", "schema-cache": null, "Timestamp Format": null, "Date Format": null, "Pretty Print JSON": "false", "compression-format": "none", "Schema Write Strategy": "no-schema", "suppress-nulls": "never-suppress", "output-grouping": "output-array", "schema-name": "${schema.name}", "schema-registry": null, "Time Format": null, "schema-access-strategy": "inherit-record-schema", "schema-version": null, "schema-text": "${avro.schema}", "Schema Reference Writer": null }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Allow Scientific Notation": { "name": "Allow Scientific Notation", "displayName": "Allow Scientific Notation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-level": { "name": "compression-level", "displayName": "Compression Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-cache": { "name": "schema-cache", "displayName": "Schema Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Pretty Print JSON": { "name": "Pretty Print JSON", "displayName": "Pretty Print JSON", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-format": { "name": "compression-format", "displayName": "Compression Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Write Strategy": { "name": "Schema Write Strategy", "displayName": "Schema Write Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "suppress-nulls": { "name": "suppress-nulls", "displayName": "Suppress Null Values", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "output-grouping": { "name": "output-grouping", "displayName": "Output Grouping", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Reference Writer": { "name": "Schema Reference Writer", "displayName": "Schema Reference Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordSetWriterFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" }, { "identifier": "5e81a80d-728d-3c87-800e-aa957618da55", "instanceIdentifier": "a53045c6-0195-1000-ffff-ffffef6c13db", "name": "CSVRecordSetWriter", "comments": "", "type": "org.apache.nifi.csv.CSVRecordSetWriter", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "CSV Format": "custom", "Include Header Line": "true", "schema-cache": null, "Escape Character": "\\", "Date Format": null, "Null String": null, "Trim Fields": "true", "schema-registry": null, "Time Format": null, "Comment Marker": null, "schema-access-strategy": "inherit-record-schema", "schema-version": null, "csvutils-character-set": "UTF-8", "schema-text": "${avro.schema}", "csv-writer": "commons-csv", "Quote Character": "\"", "Value Separator": ",", "Record Separator": "\\n", "Timestamp Format": null, "Schema Write Strategy": "no-schema", "schema-name": "${schema.name}", "Quote Mode": "MINIMAL", "Schema Reference Writer": null, "Include Trailing Delimiter": "false" }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "CSV Format": { "name": "CSV Format", "displayName": "CSV Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Include Header Line": { "name": "Include Header Line", "displayName": "Include Header Line", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-cache": { "name": "schema-cache", "displayName": "Schema Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Escape Character": { "name": "Escape Character", "displayName": "Escape Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null String": { "name": "Null String", "displayName": "Null String", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Trim Fields": { "name": "Trim Fields", "displayName": "Trim Fields", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Comment Marker": { "name": "Comment Marker", "displayName": "Comment Marker", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csvutils-character-set": { "name": "csvutils-character-set", "displayName": "Character Set", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "csv-writer": { "name": "csv-writer", "displayName": "CSV Writer", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Quote Character": { "name": "Quote Character", "displayName": "Quote Character", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Value Separator": { "name": "Value Separator", "displayName": "Value Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Separator": { "name": "Record Separator", "displayName": "Record Separator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Write Strategy": { "name": "Schema Write Strategy", "displayName": "Schema Write Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Quote Mode": { "name": "Quote Mode", "displayName": "Quote Mode", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Reference Writer": { "name": "Schema Reference Writer", "displayName": "Schema Reference Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Include Trailing Delimiter": { "name": "Include Trailing Delimiter", "displayName": "Include Trailing Delimiter", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordSetWriterFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "a1618dd5-e11a-3ff4-9a6c-62607956b4f4" } ], "defaultFlowFileExpiration": "0 sec", "defaultBackPressureObjectThreshold": 10000, "defaultBackPressureDataSizeThreshold": "1 GB", "scheduledState": "ENABLED", "executionEngine": "INHERITED", "maxConcurrentTasks": 1, "statelessFlowTimeout": "1 min", "flowFileConcurrency": "UNBOUNDED", "flowFileOutboundPolicy": "STREAM_WHEN_AVAILABLE", "componentType": "PROCESS_GROUP" }, "externalControllerServices": {}, "parameterContexts": {}, "flowEncodingVersion": "1.0", "parameterProviders": {}, "latest": false } From e9700e697cc9357f7ee944cbecb08b2561bb694e Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:47:14 +0200 Subject: [PATCH 2/8] disable sni check for nifi --- stacks/nifi-kafka-druid-superset-s3/nifi.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/stacks/nifi-kafka-druid-superset-s3/nifi.yaml b/stacks/nifi-kafka-druid-superset-s3/nifi.yaml index bb46f7ad..f7e3fcdf 100644 --- a/stacks/nifi-kafka-druid-superset-s3/nifi.yaml +++ b/stacks/nifi-kafka-druid-superset-s3/nifi.yaml @@ -21,7 +21,7 @@ spec: min: "500m" max: "4" memory: - limit: '6Gi' + limit: "6Gi" storage: contentRepo: capacity: "10Gi" @@ -33,6 +33,10 @@ spec: capacity: "4Gi" stateRepo: capacity: "1Gi" + configOverrides: + nifi.properties: + nifi.web.https.sni.required: "false" + nifi.web.https.sni.host.check: "false" roleGroups: default: replicas: 1 From 4c4623448434f75b4871b52db69511877cb2e35c Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:47:56 +0200 Subject: [PATCH 3/8] docs: add kafka section back in --- .../nifi-kafka-druid-earthquake-data.adoc | 107 +++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc index 0dce404f..b599dfc1 100644 --- a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc +++ b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc @@ -27,7 +27,7 @@ Additionally, we have to use the FQDN service names (including the namespace), s To run this demo, your system needs at least: * 9 {k8s-cpu}[cpu units] (core/hyperthread) -* 42GiB memory +* 42GiB memory (minimum of 16GiB per node) * 75GiB disk storage == Overview @@ -86,6 +86,111 @@ $ stackablectl stacklet list include::partial$instance-hint.adoc[] +== Inspect the data in Kafka + +Kafka is an event streaming platform to stream the data in near real-time. +All the messages put in and read from Kafka are structured in dedicated queues called topics. +The test data will be put into a topic called `earthquakes`. +The records are produced (written) by the test data generator and consumed (read) by Druid afterwards in the same order they were created. + +Kafka uses mutual TLS, so clients wanting to connect to Kafka must present a valid TLS certificate. +The easiest way to obtain this is to shell into the `kafka-broker-default-0` Pod, as we will do in the following section for demonstration purposes. +For a production setup, you should spin up a dedicated Pod provisioned with a certificate acting as a Kafka client instead of shell-ing into the Kafka Pod. + +=== List the available Topics + +You can execute a command on the Kafka broker to list the available topics as follows: + +// In the following commands the kcat-prober container instead of the kafka container is used to send requests to Kafka. +// This is necessary because kcat cannot use key- and truststore files with empty passwords, which are mounted here to the kafka container. +// However, the kcat-prober container has TLS certificates mounted, which can be used by kcat to connect to Kafka. +[source,console] +---- +$ kubectl exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-topics.sh \ +--describe \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--command-config /stackable/config/client.properties +... +Topic: earthquakes TopicId: ND51v_XcQPK4Ilm7A35Pag PartitionCount: 8 ReplicationFactor: 1 Configs: min.insync.replicas=1,segment.bytes=100000000,retention.bytes=900000000 + Topic: earthquakes Partition: 0 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 1 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 2 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 3 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 4 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 5 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 6 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 7 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: +---- + +You can see that Kafka consists of one broker, and the topic `earthquakes` with eight partitions has been created. To +see some records sent to Kafka, run the following command. You can change the number of records to print via the `-c` +parameter. + +[source,console] +---- +$ kubectl exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-console-consumer.sh \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--consumer.config /stackable/config/client.properties \ +--topic earthquakes \ +--offset earliest \ +--partition 0 \ +--max-messages 1 +---- + +Below is an example of the output of one record: + +[source,json] +---- + { + "time":"1950-02-07T10:37:29.240Z", + "latitude":45.949, + "longitude":151.59, + "depth":35.0, + "mag":5.94, + "magType":"mw", + "nst":null, + "gap":null, + "dmin":null, + "rms":null, + "net":"iscgem", + "id":"iscgem895202", + "updated":"2022-04-26T18:23:38.377Z", + "place":"Kuril Islands", + "type":"earthquake", + "horizontalError":null, + "depthError":12.6, + "magError":0.55, + "magNst":null, + "status":"reviewed", + "locationSource":"iscgem", + "magSource":"iscgem" +} +---- + +If you are interested in how many records have been produced to the Kafka topic so far, use the following command. + +[source,console] +---- +$ kubectl exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-get-offsets.sh \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--command-config /stackable/config/client.properties \ +--topic earthquakes +... +earthquakes:0:757379 +earthquakes:1:759282 +earthquakes:2:761924 +earthquakes:3:761339 +earthquakes:4:759059 +earthquakes:5:767695 +earthquakes:6:771457 +earthquakes:7:768301 +---- + +If you calculate `765,000` records * `8` partitions, you end up with ~ 6,120,000 records. + == NiFi NiFi is used to fetch earthquake data from the internet and ingest it into Kafka. From f36b7b1edee9b3c1b0926fe3ffdb5d7720d0e8b6 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:57:20 +0200 Subject: [PATCH 4/8] fix pre-comit lint --- .../pages/nifi-kafka-druid-earthquake-data.adoc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc index b599dfc1..3f1cc51d 100644 --- a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc +++ b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc @@ -113,14 +113,14 @@ $ kubectl exec kafka-broker-default-0 -c kafka -- \ --command-config /stackable/config/client.properties ... Topic: earthquakes TopicId: ND51v_XcQPK4Ilm7A35Pag PartitionCount: 8 ReplicationFactor: 1 Configs: min.insync.replicas=1,segment.bytes=100000000,retention.bytes=900000000 - Topic: earthquakes Partition: 0 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: - Topic: earthquakes Partition: 1 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: - Topic: earthquakes Partition: 2 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: - Topic: earthquakes Partition: 3 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: - Topic: earthquakes Partition: 4 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: - Topic: earthquakes Partition: 5 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: - Topic: earthquakes Partition: 6 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: - Topic: earthquakes Partition: 7 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 0 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 1 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 2 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 3 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 4 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 5 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 6 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: earthquakes Partition: 7 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: ---- You can see that Kafka consists of one broker, and the topic `earthquakes` with eight partitions has been created. To From b7af01c72180f4f15b061aaa3e795b7b4352267f Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 21 Oct 2025 09:55:59 +0200 Subject: [PATCH 5/8] Update docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc Co-authored-by: Sebastian Bernauer --- docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc index 3f1cc51d..feb95649 100644 --- a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc +++ b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc @@ -124,7 +124,7 @@ Topic: earthquakes TopicId: ND51v_XcQPK4Ilm7A35Pag PartitionCount: 8 Replication ---- You can see that Kafka consists of one broker, and the topic `earthquakes` with eight partitions has been created. To -see some records sent to Kafka, run the following command. You can change the number of records to print via the `-c` +see some records sent to Kafka, run the following command. You can change the number of records to print via the `--max-messages` parameter. [source,console] From 66aa192b6ae8b02ea4692029b49812259c2d50ce Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:30:32 +0200 Subject: [PATCH 6/8] docs: re-add kafka section --- .../nifi-kafka-druid-water-level-data.adoc | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) diff --git a/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc b/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc index 14e1b0bb..9b2053d9 100644 --- a/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc +++ b/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc @@ -92,6 +92,215 @@ $ stackablectl stacklet list include::partial$instance-hint.adoc[] +== Inspect the data in Kafka + +Kafka is an event streaming platform to stream the data in near real-time. All the messages put in and read from Kafka +are structured in dedicated queues called topics. The test data will be put into topics called stations and measurements. The records +are produced (put in) by the test data generator and consumed (read) by Druid afterwards in the same order they were +created. + +To interact with Kafka you will use the client scripts shipped with the Kafka image. Kafka uses mutual TLS, so clients +wanting to connect to Kafka must present a valid TLS certificate. The easiest way to obtain this is to shell into the +`kafka-broker-default-0` Pod, as we will do in the following section for demonstration purposes. For a production setup, +you should spin up a dedicated Pod provisioned with a certificate acting as a Kafka client instead of shell-ing into the +Kafka Pod. + +=== List the available Topics + +You can execute a command on the Kafka broker to list the available topics as follows: + +[source,console] +---- +$ kubectl k exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-topics.sh \ +--describe \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--command-config /stackable/config/client.properties +... +Topic: measurements TopicId: w9qYb3GaTvCMZj4G8pkPPQ PartitionCount: 8 ReplicationFactor: 1 Configs: min.insync.replicas=1,segment.bytes=100000000,retention.bytes=900000000 + Topic: measurements Partition: 0 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: measurements Partition: 1 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: measurements Partition: 2 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: measurements Partition: 3 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: measurements Partition: 4 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: measurements Partition: 5 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: measurements Partition: 6 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: measurements Partition: 7 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: +Topic: stations TopicId: QkKmvOagQkG4QbeS0IZ_Tg PartitionCount: 8 ReplicationFactor: 1 Configs: min.insync.replicas=1,segment.bytes=100000000,retention.bytes=900000000 + Topic: stations Partition: 0 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: stations Partition: 1 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: stations Partition: 2 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: stations Partition: 3 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: stations Partition: 4 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: stations Partition: 5 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: stations Partition: 6 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: + Topic: stations Partition: 7 Leader: 1243966388 Replicas: 1243966388 Isr: 1243966388 Elr: LastKnownElr: +---- + +You can see that Kafka consists of one broker, and the topics `stations` and `measurements` have been created with eight +partitions each. + +=== Show Sample Records + +To see some records sent to Kafka, run the following commands. You can change the number of records to +print via the `--max-messages` parameter. + +[source,console] +---- +$ kubectl exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-console-consumer.sh \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--consumer.config /stackable/config/client.properties \ +--topic stations \ +--offset earliest \ +--partition 0 \ +--max-messages 2 +---- + +Below is an example of the output of two records: + +[source,json] +---- +{ + "uuid": "47174d8f-1b8e-4599-8a59-b580dd55bc87", + "number": 48900237, + "shortname": "EITZE", + "longname": "EITZE", + "km": 9.56, + "agency": "VERDEN", + "longitude": 9.2767694354, + "latitude": 52.9040654474, + "water": { + "shortname": "ALLER", + "longname": "ALLER" + } +} +{ + "uuid": "5aaed954-de4e-4528-8f65-f3f530bc8325", + "number": 48900204, + "shortname": "RETHEM", + "longname": "RETHEM", + "km": 34.22, + "agency": "VERDEN", + "longitude": 9.3828408101, + "latitude": 52.7890975921, + "water": { + "shortname": "ALLER", + "longname": "ALLER" + } +} +---- + +[source,console] +---- +$ kubectl exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-console-consumer.sh \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--consumer.config /stackable/config/client.properties \ +--topic measurements \ +--offset earliest \ +--partition 0 \ +--max-messages 3 +---- + +Below is an example of the output of three records: + +[source,json] +---- +{ + "timestamp": 1658151900000, + "value": 221, + "station_uuid": "47174d8f-1b8e-4599-8a59-b580dd55bc87" +} +{ + "timestamp": 1658152800000, + "value": 220, + "station_uuid": "47174d8f-1b8e-4599-8a59-b580dd55bc87" +} +{ + "timestamp": 1658153700000, + "value": 220, + "station_uuid": "47174d8f-1b8e-4599-8a59-b580dd55bc87" +} +---- + +The records of the two topics only contain the needed data. The measurement records contain a `station_uuid` for the +measuring station. The relationship is illustrated below. + +image::nifi-kafka-druid-water-level-data/topics.png[] + +The reason for splitting the data up into two different topics is the improved performance. One more straightforward +solution would be to use a single topic and produce records like the following: + +[source,json] +---- +{ + "uuid": "47174d8f-1b8e-4599-8a59-b580dd55bc87", + "number": 48900237, + "shortname": "EITZE", + "longname": "EITZE", + "km": 9.56, + "agency": "VERDEN", + "longitude": 9.2767694354, + "latitude": 52.9040654474, + "water": { + "shortname": "ALLER", + "longname": "ALLER" + }, + "timestamp": 1658151900000, + "value": 221 +} +---- + +Notice the two last attributes that differ from the previously shown `stations` records. The obvious downside is that +every measurement (multiple millions of it) has to contain all the data known about the station it was measured at. This +often leads to transmitting and storing duplicated information, e.g., the longitude of a station, resulting in increased +network traffic and storage usage. The solution is only to send a station's known/needed data or measurement data. This +process is called data normalization. The downside is that when analyzing the data, you need to combine the records from +multiple tables in Druid (`stations` and `measurements`). + +If you are interested in how many records have been produced to the Kafka topic so far, use the following command. It +will print the last record produced to the topic partition, formatted with the pattern specified in the `-f` parameter. +The given pattern will print some metadata of the record. + +[source,console] +---- +$ kubectl exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-get-offsets.sh \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--command-config /stackable/config/client.properties \ +--topic measurements +... +measurements:0:1366665 +measurements:1:1364930 +measurements:2:1395607 +measurements:3:1390762 +measurements:4:1368829 +measurements:5:1362539 +measurements:6:1344362 +measurements:7:1369651 +---- + +Multiplying `1,324,098` records by `8` partitions, we end up with ~ 10,592,784 records. + +To inspect the last produced records, use the following command. Here, we consume the last three records from partition +`0` of the `measurements` topic. + +[source,console] +---- +$ kubectl exec kafka-broker-default-0 -c kafka -- \ +/stackable/kafka/bin/kafka-console-consumer.sh \ +--bootstrap-server kafka-broker-default-headless.default.svc.cluster.local:9093 \ +--consumer.config /stackable/config/client.properties \ +--topic measurements \ +--offset latest \ +--partition 0 \ +--max-messages 3 +-... +{"timestamp":"2025-10-21T11:00:00+02:00","value":369.54,"station_uuid":"5cdc6555-87d7-4fcd-834d-cbbe24c9d08b"} +{"timestamp":"2025-10-21T11:15:00+02:00","value":369.54,"station_uuid":"5cdc6555-87d7-4fcd-834d-cbbe24c9d08b"} +{"timestamp":"2025-10-21T11:00:00+02:00","value":8.0,"station_uuid":"7deedc21-2878-40cc-ab47-f6da0d9002f1"} +---- == NiFi NiFi fetches water-level data from the internet and ingests it into Kafka in real time. This demo includes a workflow From 9879e02d9a3040b47c33427ef8e9b44a39e52bb0 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:31:10 +0200 Subject: [PATCH 7/8] move water level flow to config map and update bootstrap.servers --- .../IngestWaterLevelsToKafka.json | 1 - .../create-nifi-ingestion-job.yaml | 22 +++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) delete mode 100644 demos/nifi-kafka-druid-water-level-data/IngestWaterLevelsToKafka.json diff --git a/demos/nifi-kafka-druid-water-level-data/IngestWaterLevelsToKafka.json b/demos/nifi-kafka-druid-water-level-data/IngestWaterLevelsToKafka.json deleted file mode 100644 index 8016760a..00000000 --- a/demos/nifi-kafka-druid-water-level-data/IngestWaterLevelsToKafka.json +++ /dev/null @@ -1 +0,0 @@ -{ "flowContents": { "identifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "instanceIdentifier": "81598f35-0195-1000-0000-000073723729", "name": "IngestWaterLevelsToKafka_raw", "comments": "", "position": { "x": -472.0, "y": -496.0 }, "processGroups": [], "remoteProcessGroups": [], "processors": [ { "identifier": "e85c2e60-192e-3ed8-ab64-750311e0ed45", "instanceIdentifier": "46c0209c-7abe-3a8e-bbc0-39f9333f14b1", "name": "Get station list", "comments": "", "position": { "x": 485.99999797539556, "y": 246.99999837990495 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "365000 days", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "50bc20ed-2b1b-3068-0000-0000423c0a67", "instanceIdentifier": "3c9c0c1f-db51-39f1-bcea-5aa511e75799", "name": "Add station_uuid", "comments": "", "position": { "x": 1240.0, "y": 1192.0 }, "type": "org.apache.nifi.processors.jolt.JoltTransformJSON", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-jolt-nar", "version": "2.6.0" }, "properties": { "Jolt Transform": "jolt-transform-chain", "Max String Length": "20 MB", "Transform Cache Size": "1", "Custom Transformation Class Name": null, "Custom Module Directory": null, "Pretty Print": "false", "Jolt Specification": "[\n {\n \"operation\": \"default\",\n \"spec\": {\n \"*\": {\n \"station_uuid\": \"${station_uuid}\"\n }\n }\n }\n]\n" }, "propertyDescriptors": { "Jolt Transform": { "name": "Jolt Transform", "displayName": "Jolt Transform", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transform Cache Size": { "name": "Transform Cache Size", "displayName": "Transform Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Transformation Class Name": { "name": "Custom Transformation Class Name", "displayName": "Custom Transformation Class Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Module Directory": { "name": "Custom Module Directory", "displayName": "Custom Module Directory", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "MULTIPLE", "resourceTypes": [ "DIRECTORY", "FILE" ] } }, "Pretty Print": { "name": "Pretty Print", "displayName": "Pretty Print", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Jolt Specification": { "name": "Jolt Specification", "displayName": "Jolt Specification", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "TEXT", "FILE" ] } } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "8809ece7-fbe0-3613-b7b0-77e05c8f4cb1", "instanceIdentifier": "1425717b-a077-39b0-872e-7381d0b3848f", "name": "Extract station_uuid", "comments": "", "position": { "x": 861.9999979753956, "y": 726.9999983799049 }, "type": "org.apache.nifi.processors.standard.EvaluateJsonPath", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Destination": "flowfile-attribute", "Max String Length": "20 MB", "Return Type": "auto-detect", "Null Value Representation": "empty string", "station_uuid": "$.uuid", "Path Not Found Behavior": "ignore" }, "propertyDescriptors": { "Destination": { "name": "Destination", "displayName": "Destination", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Return Type": { "name": "Return Type", "displayName": "Return Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null Value Representation": { "name": "Null Value Representation", "displayName": "Null Value Representation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "station_uuid": { "name": "station_uuid", "displayName": "station_uuid", "identifiesControllerService": false, "sensitive": false, "dynamic": true }, "Path Not Found Behavior": { "name": "Path Not Found Behavior", "displayName": "Path Not Found Behavior", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure", "unmatched" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "656d02d2-3100-39e6-a3dd-a8fe91b6dd06", "instanceIdentifier": "cec0a8ff-73d7-35d1-9f9c-0c5cc0af6db2", "name": "SplitRecord", "comments": "", "position": { "x": 1237.9999979753957, "y": 510.9999983799049 }, "type": "org.apache.nifi.processors.standard.SplitRecord", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Records Per Split": "1" }, "propertyDescriptors": { "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Records Per Split": { "name": "Records Per Split", "displayName": "Records Per Split", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "original", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "e2bdb78b-009b-3086-ad39-816874d3be80", "instanceIdentifier": "72294ac8-46e9-33fb-8923-8e6cb4c69269", "name": "Get station list", "comments": "", "position": { "x": 861.9999979753956, "y": 246.99999837990495 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "365000 days", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "dde01269-6b44-3f4c-9406-8e291cd8aaa4", "instanceIdentifier": "816243be-0195-1000-ffff-fffff00620a1", "name": "Add station_uuid", "comments": "", "position": { "x": 864.0, "y": 1192.0 }, "type": "org.apache.nifi.processors.jolt.JoltTransformJSON", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-jolt-nar", "version": "2.6.0" }, "properties": { "Jolt Transform": "jolt-transform-chain", "Max String Length": "20 MB", "Transform Cache Size": "1", "Custom Transformation Class Name": null, "Custom Module Directory": null, "Pretty Print": "false", "Jolt Specification": "[\n {\n \"operation\": \"default\",\n \"spec\": {\n \"*\": {\n \"station_uuid\": \"${station_uuid}\"\n }\n }\n }\n]\n" }, "propertyDescriptors": { "Jolt Transform": { "name": "Jolt Transform", "displayName": "Jolt Transform", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transform Cache Size": { "name": "Transform Cache Size", "displayName": "Transform Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Transformation Class Name": { "name": "Custom Transformation Class Name", "displayName": "Custom Transformation Class Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Module Directory": { "name": "Custom Module Directory", "displayName": "Custom Module Directory", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "MULTIPLE", "resourceTypes": [ "DIRECTORY", "FILE" ] } }, "Pretty Print": { "name": "Pretty Print", "displayName": "Pretty Print", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Jolt Specification": { "name": "Jolt Specification", "displayName": "Jolt Specification", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "TEXT", "FILE" ] } } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "98a12d17-c277-3226-af8b-03848dbdbf11", "instanceIdentifier": "816125f7-0195-1000-0000-00006b8c4170", "name": "PublishKafka", "comments": "", "position": { "x": 1240.0, "y": 1408.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "snappy", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "measurements", "Kafka Key": null, "partition": null, "Kafka Connection Service": "29032623-5723-3b5d-8983-07534da27fd5", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "ccf5a9db-6d16-3aa5-b054-b33a51405240", "instanceIdentifier": "6304de41-531f-37e9-b1a9-db89a7181c46", "name": "Extract station_uuid", "comments": "", "position": { "x": 1237.9999979753957, "y": 726.9999983799049 }, "type": "org.apache.nifi.processors.standard.EvaluateJsonPath", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Destination": "flowfile-attribute", "Max String Length": "20 MB", "Return Type": "auto-detect", "Null Value Representation": "empty string", "station_uuid": "$.uuid", "Path Not Found Behavior": "ignore" }, "propertyDescriptors": { "Destination": { "name": "Destination", "displayName": "Destination", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Return Type": { "name": "Return Type", "displayName": "Return Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null Value Representation": { "name": "Null Value Representation", "displayName": "Null Value Representation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "station_uuid": { "name": "station_uuid", "displayName": "station_uuid", "identifiesControllerService": false, "sensitive": false, "dynamic": true }, "Path Not Found Behavior": { "name": "Path Not Found Behavior", "displayName": "Path Not Found Behavior", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure", "unmatched" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "d56a1c61-9006-315a-a15c-41439f14d030", "instanceIdentifier": "d78cc57f-9bd1-35a2-9957-a70d52d0fb69", "name": "SplitRecord", "comments": "", "position": { "x": 861.9999979753956, "y": 510.9999983799049 }, "type": "org.apache.nifi.processors.standard.SplitRecord", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Records Per Split": "1" }, "propertyDescriptors": { "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Records Per Split": { "name": "Records Per Split", "displayName": "Records Per Split", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "original", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "a961da8c-d228-3d19-b6ed-2d48ebe35b05", "instanceIdentifier": "15a87495-c9dc-36db-a3f0-828a63a688f9", "name": "Get 30 days historic data", "comments": "", "position": { "x": 861.9999979753956, "y": 966.9999983799049 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/${station_uuid}/W/measurements.json?start=P30D", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "26542ec9-e3e3-380f-ab7a-7fa4b2c46d1e", "instanceIdentifier": "815f05d7-0195-1000-0000-000005d97f79", "name": "PublishKafka", "comments": "", "position": { "x": 864.0, "y": 1408.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "snappy", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "measurements", "Kafka Key": null, "partition": null, "Kafka Connection Service": "29032623-5723-3b5d-8983-07534da27fd5", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "4db42754-1203-340d-830d-d662d16d13c8", "instanceIdentifier": "d8795306-ee83-3143-b633-fd70c932add5", "name": "Get station list", "comments": "", "position": { "x": 1237.9999979753957, "y": 246.99999837990495 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "15 m", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "d2841e3c-954c-3f6c-8c2b-0b4f20cea21c", "instanceIdentifier": "a11d09f2-9d6d-390d-947c-397b881e980f", "name": "Get 30 minutes of historic data", "comments": "", "position": { "x": 1237.9999979753957, "y": 966.9999983799049 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/${station_uuid}/W/measurements.json?start=PT30M", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "1 s", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "f5aefb8c-ec8c-3895-a221-b1514bf49019", "instanceIdentifier": "815b69b0-0195-1000-ffff-ffff8e27806d", "name": "Produce station records", "comments": "", "position": { "x": 488.0, "y": 512.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "none", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "stations", "Kafka Key": null, "partition": null, "Kafka Connection Service": "29032623-5723-3b5d-8983-07534da27fd5", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "inputPorts": [], "outputPorts": [], "connections": [ { "identifier": "1ed79459-2cd4-30cc-b246-7df8c512d6aa", "instanceIdentifier": "f458062a-4156-340b-99e1-2c9c1fd5691d", "name": "", "source": { "id": "4db42754-1203-340d-830d-d662d16d13c8", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get station list", "comments": "", "instanceIdentifier": "d8795306-ee83-3143-b633-fd70c932add5" }, "destination": { "id": "656d02d2-3100-39e6-a3dd-a8fe91b6dd06", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "cec0a8ff-73d7-35d1-9f9c-0c5cc0af6db2" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 1, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "6005f6e4-6a3f-379b-92bb-af654e9c13d8", "instanceIdentifier": "1b239318-886a-3f35-a3d4-c7a19aa52cad", "name": "", "source": { "id": "d56a1c61-9006-315a-a15c-41439f14d030", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "d78cc57f-9bd1-35a2-9957-a70d52d0fb69" }, "destination": { "id": "8809ece7-fbe0-3613-b7b0-77e05c8f4cb1", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "1425717b-a077-39b0-872e-7381d0b3848f" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "splits" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "ROUND_ROBIN", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "be649012-9cd8-3408-aef8-361c82058108", "instanceIdentifier": "8163d1b9-0195-1000-0000-000023899a37", "name": "", "source": { "id": "50bc20ed-2b1b-3068-0000-0000423c0a67", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "3c9c0c1f-db51-39f1-bcea-5aa511e75799" }, "destination": { "id": "98a12d17-c277-3226-af8b-03848dbdbf11", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "PublishKafka", "comments": "", "instanceIdentifier": "816125f7-0195-1000-0000-00006b8c4170" }, "labelIndex": 0, "zIndex": 0, "selectedRelationships": [ "success" ], "backPressureObjectThreshold": 20, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "18447f5e-4e45-39bc-80ac-86ef6083a913", "instanceIdentifier": "40d45abb-c0bb-3d35-a5e9-d4c28528445c", "name": "", "source": { "id": "ccf5a9db-6d16-3aa5-b054-b33a51405240", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "6304de41-531f-37e9-b1a9-db89a7181c46" }, "destination": { "id": "d2841e3c-954c-3f6c-8c2b-0b4f20cea21c", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 minutes of historic data", "comments": "", "instanceIdentifier": "a11d09f2-9d6d-390d-947c-397b881e980f" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "matched" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "d7a99464-402e-35fc-b090-3bc3d5fcb68a", "instanceIdentifier": "d5259744-57c7-3711-a0da-8114cb7db873", "name": "", "source": { "id": "8809ece7-fbe0-3613-b7b0-77e05c8f4cb1", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "1425717b-a077-39b0-872e-7381d0b3848f" }, "destination": { "id": "a961da8c-d228-3d19-b6ed-2d48ebe35b05", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 days historic data", "comments": "", "instanceIdentifier": "15a87495-c9dc-36db-a3f0-828a63a688f9" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "matched" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "3b89e1cf-29b9-3e53-bcc5-a58dc0db17a9", "instanceIdentifier": "296a4a6e-cf82-39bb-a329-9fc2a74652e7", "name": "", "source": { "id": "e85c2e60-192e-3ed8-ab64-750311e0ed45", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get station list", "comments": "", "instanceIdentifier": "46c0209c-7abe-3a8e-bbc0-39f9333f14b1" }, "destination": { "id": "f5aefb8c-ec8c-3895-a221-b1514bf49019", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Produce station records", "comments": "", "instanceIdentifier": "815b69b0-0195-1000-ffff-ffff8e27806d" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10000, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "0085c625-9d46-3f18-8d05-2d55c274a50e", "instanceIdentifier": "50823b83-873f-3bcd-b044-a85de2c53cf9", "name": "", "source": { "id": "656d02d2-3100-39e6-a3dd-a8fe91b6dd06", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "cec0a8ff-73d7-35d1-9f9c-0c5cc0af6db2" }, "destination": { "id": "ccf5a9db-6d16-3aa5-b054-b33a51405240", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "6304de41-531f-37e9-b1a9-db89a7181c46" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "splits" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "ROUND_ROBIN", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "9424162b-ce44-33ee-8b7a-cfea386e47e4", "instanceIdentifier": "74f2322f-a826-39db-87e3-114ce6a576e4", "name": "", "source": { "id": "e2bdb78b-009b-3086-ad39-816874d3be80", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get station list", "comments": "", "instanceIdentifier": "72294ac8-46e9-33fb-8923-8e6cb4c69269" }, "destination": { "id": "d56a1c61-9006-315a-a15c-41439f14d030", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "d78cc57f-9bd1-35a2-9957-a70d52d0fb69" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 1, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "776daaa4-a1f6-38a7-b233-2102ddf589d8", "instanceIdentifier": "fbb55c02-33f9-3651-8e7d-f55f264e0514", "name": "", "source": { "id": "d2841e3c-954c-3f6c-8c2b-0b4f20cea21c", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 minutes of historic data", "comments": "", "instanceIdentifier": "a11d09f2-9d6d-390d-947c-397b881e980f" }, "destination": { "id": "50bc20ed-2b1b-3068-0000-0000423c0a67", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "3c9c0c1f-db51-39f1-bcea-5aa511e75799" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "82121195-d4b9-37e9-9994-87a6d890cc71", "instanceIdentifier": "8162fee0-0195-1000-ffff-ffff961b93ba", "name": "", "source": { "id": "dde01269-6b44-3f4c-9406-8e291cd8aaa4", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "816243be-0195-1000-ffff-fffff00620a1" }, "destination": { "id": "26542ec9-e3e3-380f-ab7a-7fa4b2c46d1e", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "PublishKafka", "comments": "", "instanceIdentifier": "815f05d7-0195-1000-0000-000005d97f79" }, "labelIndex": 0, "zIndex": 0, "selectedRelationships": [ "success" ], "backPressureObjectThreshold": 20, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "e911351c-a4a5-3a14-9c74-ebd96eef0f8d", "instanceIdentifier": "8b7cc62b-560c-3b8e-903a-f9572ac50df8", "name": "", "source": { "id": "a961da8c-d228-3d19-b6ed-2d48ebe35b05", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 days historic data", "comments": "", "instanceIdentifier": "15a87495-c9dc-36db-a3f0-828a63a688f9" }, "destination": { "id": "dde01269-6b44-3f4c-9406-8e291cd8aaa4", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "816243be-0195-1000-ffff-fffff00620a1" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "labels": [ { "identifier": "10ab1424-3268-3b7f-9e4e-d843df2427cd", "instanceIdentifier": "a57103e7-30b7-38d7-bb6c-f80b4dc4a710", "position": { "x": 485.99999797539556, "y": 174.99999837990495 }, "label": "Water levels data", "zIndex": 0, "width": 1104.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "938fbab6-21ee-347f-814a-b0016b7405b3", "instanceIdentifier": "99926082-4766-3223-8332-3f4affeae76b", "position": { "x": 1237.9999979753957, "y": 214.99999837990495 }, "label": "Stream real-time data", "zIndex": 0, "width": 152.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "b80512f7-0274-3712-8884-d6b31555927a", "instanceIdentifier": "7ef5e570-ca1c-3a70-abf7-9749db121fbc", "position": { "x": 485.99999797539556, "y": 214.99999837990495 }, "label": "Ingest station records", "zIndex": 0, "width": 152.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "4524d905-b8c4-32f6-ae83-4ecc54f95bfa", "instanceIdentifier": "a501f0f6-3372-3444-829c-2109de521069", "position": { "x": 861.9999979753956, "y": 214.99999837990495 }, "label": "Ingest historic data", "zIndex": 0, "width": 152.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "funnels": [], "controllerServices": [ { "identifier": "a43e5844-29fd-3ad4-8f84-5cfb771da897", "instanceIdentifier": "3213e3ae-00c3-3dd0-a838-770a15dc68e0", "name": "StandardRestrictedSSLContextService", "comments": "", "type": "org.apache.nifi.ssl.StandardRestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-ssl-context-service-nar", "version": "2.6.0" }, "properties": { "Truststore Type": "PKCS12", "Truststore Password": "secret", "SSL Protocol": "TLSv1.3", "Keystore Type": "PKCS12", "Keystore Password": "secret", "Truststore Filename": "/stackable/keystore/truststore.p12", "Keystore Filename": "/stackable/keystore/keystore.p12" }, "propertyDescriptors": { "Truststore Type": { "name": "Truststore Type", "displayName": "Truststore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Protocol": { "name": "SSL Protocol", "displayName": "TLS Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Keystore Type": { "name": "Keystore Type", "displayName": "Keystore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Truststore Filename": { "name": "Truststore Filename", "displayName": "Truststore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } }, "Keystore Password": { "name": "Keystore Password", "displayName": "Keystore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "key-password": { "name": "key-password", "displayName": "Key Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Truststore Password": { "name": "Truststore Password", "displayName": "Truststore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Keystore Filename": { "name": "Keystore Filename", "displayName": "Keystore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } } }, "controllerServiceApis": [ { "type": "org.apache.nifi.ssl.SSLContextProvider", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.SSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.RestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "instanceIdentifier": "ca38b3a6-868b-33f0-a858-30da336cc679", "name": "JsonRecordSetWriter", "type": "org.apache.nifi.json.JsonRecordSetWriter", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "Allow Scientific Notation": "false", "compression-level": "1", "schema-cache": null, "Timestamp Format": null, "Date Format": null, "Pretty Print JSON": "false", "compression-format": "none", "Schema Write Strategy": "no-schema", "suppress-nulls": "never-suppress", "output-grouping": "output-array", "schema-name": "${schema.name}", "schema-registry": null, "Time Format": null, "schema-access-strategy": "inherit-record-schema", "schema-version": null, "schema-text": "${avro.schema}", "Schema Reference Writer": null }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Allow Scientific Notation": { "name": "Allow Scientific Notation", "displayName": "Allow Scientific Notation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-level": { "name": "compression-level", "displayName": "Compression Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-cache": { "name": "schema-cache", "displayName": "Schema Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Pretty Print JSON": { "name": "Pretty Print JSON", "displayName": "Pretty Print JSON", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-format": { "name": "compression-format", "displayName": "Compression Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Write Strategy": { "name": "Schema Write Strategy", "displayName": "Schema Write Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "suppress-nulls": { "name": "suppress-nulls", "displayName": "Suppress Null Values", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "output-grouping": { "name": "output-grouping", "displayName": "Output Grouping", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Reference Writer": { "name": "Schema Reference Writer", "displayName": "Schema Reference Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordSetWriterFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "instanceIdentifier": "2d152882-2f62-3e45-8c8e-5f3127f8b931", "name": "JsonTreeReader", "type": "org.apache.nifi.json.JsonTreeReader", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "Max String Length": "20 MB", "schema-application-strategy": "SELECTED_PART", "Timestamp Format": null, "schema-inference-cache": null, "Date Format": null, "schema-name": "${schema.name}", "starting-field-strategy": "ROOT_NODE", "schema-registry": null, "starting-field-name": null, "Time Format": null, "schema-access-strategy": "infer-schema", "schema-version": null, "schema-text": "${avro.schema}", "Allow Comments": "false" }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-application-strategy": { "name": "schema-application-strategy", "displayName": "Schema Application Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-inference-cache": { "name": "schema-inference-cache", "displayName": "Schema Inference Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "starting-field-strategy": { "name": "starting-field-strategy", "displayName": "Starting Field Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "starting-field-name": { "name": "starting-field-name", "displayName": "Starting Field Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Allow Comments": { "name": "Allow Comments", "displayName": "Allow Comments", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordReaderFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "29032623-5723-3b5d-8983-07534da27fd5", "instanceIdentifier": "815ba7c0-0195-1000-0000-00002ff4760b", "name": "Kafka3ConnectionService", "comments": "", "type": "org.apache.nifi.kafka.service.Kafka3ConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-3-service-nar", "version": "2.6.0" }, "properties": { "security.protocol": "SSL", "SSL Context Service": "a43e5844-29fd-3ad4-8f84-5cfb771da897", "ack.wait.time": "5 sec", "sasl.username": null, "max.poll.records": "10000", "sasl.mechanism": "GSSAPI", "isolation.level": "read_committed", "max.block.ms": "5 sec", "bootstrap.servers": "kafka-broker-default.default.svc.cluster.local:9093", "kerberos-user-service": null, "sasl.kerberos.service.name": null, "default.api.timeout.ms": "60 sec" }, "propertyDescriptors": { "ack.wait.time": { "name": "ack.wait.time", "displayName": "Acknowledgment Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.username": { "name": "sasl.username", "displayName": "SASL Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.poll.records": { "name": "max.poll.records", "displayName": "Max Poll Records", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "bootstrap.servers": { "name": "bootstrap.servers", "displayName": "Bootstrap Servers", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.kerberos.service.name": { "name": "sasl.kerberos.service.name", "displayName": "Kerberos Service Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "security.protocol": { "name": "security.protocol", "displayName": "Security Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.mechanism": { "name": "sasl.mechanism", "displayName": "SASL Mechanism", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "isolation.level": { "name": "isolation.level", "displayName": "Transaction Isolation Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.block.ms": { "name": "max.block.ms", "displayName": "Max Metadata Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "kerberos-user-service": { "name": "kerberos-user-service", "displayName": "Kerberos User Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.password": { "name": "sasl.password", "displayName": "SASL Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "default.api.timeout.ms": { "name": "default.api.timeout.ms", "displayName": "Client Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.kafka.service.api.KafkaConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-service-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "defaultFlowFileExpiration": "0 sec", "defaultBackPressureObjectThreshold": 10000, "defaultBackPressureDataSizeThreshold": "1 GB", "scheduledState": "ENABLED", "executionEngine": "INHERITED", "maxConcurrentTasks": 1, "statelessFlowTimeout": "1 min", "flowFileConcurrency": "UNBOUNDED", "flowFileOutboundPolicy": "STREAM_WHEN_AVAILABLE", "componentType": "PROCESS_GROUP" }, "externalControllerServices": {}, "parameterContexts": {}, "flowEncodingVersion": "1.0", "parameterProviders": {}, "latest": false } diff --git a/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml b/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml index 2ef923bb..277c9812 100644 --- a/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml +++ b/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml @@ -32,6 +32,8 @@ spec: volumeMounts: - name: script mountPath: /tmp/script + - name: flow + mountPath: /tmp/flow - name: nifi-admin-credentials-secret mountPath: /nifi-admin-credentials-secret env: @@ -43,6 +45,9 @@ spec: - name: script configMap: name: create-nifi-ingestion-job-script + - name: flow + configMap: + name: ingest-water-level-data-flow - name: nifi-admin-credentials-secret secret: secretName: nifi-admin-credentials-secret @@ -76,12 +81,6 @@ data: service_login(username=USERNAME, password=PASSWORD) print("Logged in") - response = requests.get("https://raw.githubusercontent.com/stackabletech/demos/refs/heads/main/demos/nifi-kafka-druid-water-level-data/IngestWaterLevelsToKafka.json") - - filename = "/tmp/IngestWaterLevelsToKafka.json" - with open(filename, "wb") as f: - f.write(response.content) - pg_id = get_root_pg_id() if not nipyapi.config.nifi_config.api_client: @@ -103,7 +102,7 @@ data: ('clientId', nipyapi.nifi.FlowApi().generate_client_id()), ], files={ - 'file': filename + 'file': "/tmp/flow/IngestWaterLevelsToKafka.json" }, auth_settings=['tokenAuth']) @@ -123,3 +122,12 @@ data: print(f"Failed to schedule controller {controller.component.name}: {e}") schedule_process_group(pg_id, scheduled=True) +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: ingest-water-level-data-flow + namespace: default +data: + IngestWaterLevelsToKafka.json: | + { "flowContents": { "identifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "instanceIdentifier": "81598f35-0195-1000-0000-000073723729", "name": "IngestWaterLevelsToKafka_raw", "comments": "", "position": { "x": -472.0, "y": -496.0 }, "processGroups": [], "remoteProcessGroups": [], "processors": [ { "identifier": "e85c2e60-192e-3ed8-ab64-750311e0ed45", "instanceIdentifier": "46c0209c-7abe-3a8e-bbc0-39f9333f14b1", "name": "Get station list", "comments": "", "position": { "x": 485.99999797539556, "y": 246.99999837990495 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "365000 days", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "50bc20ed-2b1b-3068-0000-0000423c0a67", "instanceIdentifier": "3c9c0c1f-db51-39f1-bcea-5aa511e75799", "name": "Add station_uuid", "comments": "", "position": { "x": 1240.0, "y": 1192.0 }, "type": "org.apache.nifi.processors.jolt.JoltTransformJSON", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-jolt-nar", "version": "2.6.0" }, "properties": { "Jolt Transform": "jolt-transform-chain", "Max String Length": "20 MB", "Transform Cache Size": "1", "Custom Transformation Class Name": null, "Custom Module Directory": null, "Pretty Print": "false", "Jolt Specification": "[\n {\n \"operation\": \"default\",\n \"spec\": {\n \"*\": {\n \"station_uuid\": \"${station_uuid}\"\n }\n }\n }\n]\n" }, "propertyDescriptors": { "Jolt Transform": { "name": "Jolt Transform", "displayName": "Jolt Transform", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transform Cache Size": { "name": "Transform Cache Size", "displayName": "Transform Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Transformation Class Name": { "name": "Custom Transformation Class Name", "displayName": "Custom Transformation Class Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Module Directory": { "name": "Custom Module Directory", "displayName": "Custom Module Directory", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "MULTIPLE", "resourceTypes": [ "DIRECTORY", "FILE" ] } }, "Pretty Print": { "name": "Pretty Print", "displayName": "Pretty Print", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Jolt Specification": { "name": "Jolt Specification", "displayName": "Jolt Specification", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "TEXT", "FILE" ] } } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "8809ece7-fbe0-3613-b7b0-77e05c8f4cb1", "instanceIdentifier": "1425717b-a077-39b0-872e-7381d0b3848f", "name": "Extract station_uuid", "comments": "", "position": { "x": 861.9999979753956, "y": 726.9999983799049 }, "type": "org.apache.nifi.processors.standard.EvaluateJsonPath", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Destination": "flowfile-attribute", "Max String Length": "20 MB", "Return Type": "auto-detect", "Null Value Representation": "empty string", "station_uuid": "$.uuid", "Path Not Found Behavior": "ignore" }, "propertyDescriptors": { "Destination": { "name": "Destination", "displayName": "Destination", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Return Type": { "name": "Return Type", "displayName": "Return Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null Value Representation": { "name": "Null Value Representation", "displayName": "Null Value Representation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "station_uuid": { "name": "station_uuid", "displayName": "station_uuid", "identifiesControllerService": false, "sensitive": false, "dynamic": true }, "Path Not Found Behavior": { "name": "Path Not Found Behavior", "displayName": "Path Not Found Behavior", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure", "unmatched" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "656d02d2-3100-39e6-a3dd-a8fe91b6dd06", "instanceIdentifier": "cec0a8ff-73d7-35d1-9f9c-0c5cc0af6db2", "name": "SplitRecord", "comments": "", "position": { "x": 1237.9999979753957, "y": 510.9999983799049 }, "type": "org.apache.nifi.processors.standard.SplitRecord", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Records Per Split": "1" }, "propertyDescriptors": { "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Records Per Split": { "name": "Records Per Split", "displayName": "Records Per Split", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "original", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "e2bdb78b-009b-3086-ad39-816874d3be80", "instanceIdentifier": "72294ac8-46e9-33fb-8923-8e6cb4c69269", "name": "Get station list", "comments": "", "position": { "x": 861.9999979753956, "y": 246.99999837990495 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "365000 days", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "dde01269-6b44-3f4c-9406-8e291cd8aaa4", "instanceIdentifier": "816243be-0195-1000-ffff-fffff00620a1", "name": "Add station_uuid", "comments": "", "position": { "x": 864.0, "y": 1192.0 }, "type": "org.apache.nifi.processors.jolt.JoltTransformJSON", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-jolt-nar", "version": "2.6.0" }, "properties": { "Jolt Transform": "jolt-transform-chain", "Max String Length": "20 MB", "Transform Cache Size": "1", "Custom Transformation Class Name": null, "Custom Module Directory": null, "Pretty Print": "false", "Jolt Specification": "[\n {\n \"operation\": \"default\",\n \"spec\": {\n \"*\": {\n \"station_uuid\": \"${station_uuid}\"\n }\n }\n }\n]\n" }, "propertyDescriptors": { "Jolt Transform": { "name": "Jolt Transform", "displayName": "Jolt Transform", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transform Cache Size": { "name": "Transform Cache Size", "displayName": "Transform Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Transformation Class Name": { "name": "Custom Transformation Class Name", "displayName": "Custom Transformation Class Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Custom Module Directory": { "name": "Custom Module Directory", "displayName": "Custom Module Directory", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "MULTIPLE", "resourceTypes": [ "DIRECTORY", "FILE" ] } }, "Pretty Print": { "name": "Pretty Print", "displayName": "Pretty Print", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Jolt Specification": { "name": "Jolt Specification", "displayName": "Jolt Specification", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "TEXT", "FILE" ] } } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "98a12d17-c277-3226-af8b-03848dbdbf11", "instanceIdentifier": "816125f7-0195-1000-0000-00006b8c4170", "name": "PublishKafka", "comments": "", "position": { "x": 1240.0, "y": 1408.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "snappy", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "measurements", "Kafka Key": null, "partition": null, "Kafka Connection Service": "29032623-5723-3b5d-8983-07534da27fd5", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "ccf5a9db-6d16-3aa5-b054-b33a51405240", "instanceIdentifier": "6304de41-531f-37e9-b1a9-db89a7181c46", "name": "Extract station_uuid", "comments": "", "position": { "x": 1237.9999979753957, "y": 726.9999983799049 }, "type": "org.apache.nifi.processors.standard.EvaluateJsonPath", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Destination": "flowfile-attribute", "Max String Length": "20 MB", "Return Type": "auto-detect", "Null Value Representation": "empty string", "station_uuid": "$.uuid", "Path Not Found Behavior": "ignore" }, "propertyDescriptors": { "Destination": { "name": "Destination", "displayName": "Destination", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Return Type": { "name": "Return Type", "displayName": "Return Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Null Value Representation": { "name": "Null Value Representation", "displayName": "Null Value Representation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "station_uuid": { "name": "station_uuid", "displayName": "station_uuid", "identifiesControllerService": false, "sensitive": false, "dynamic": true }, "Path Not Found Behavior": { "name": "Path Not Found Behavior", "displayName": "Path Not Found Behavior", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "failure", "unmatched" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "d56a1c61-9006-315a-a15c-41439f14d030", "instanceIdentifier": "d78cc57f-9bd1-35a2-9957-a70d52d0fb69", "name": "SplitRecord", "comments": "", "position": { "x": 861.9999979753956, "y": 510.9999983799049 }, "type": "org.apache.nifi.processors.standard.SplitRecord", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Records Per Split": "1" }, "propertyDescriptors": { "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Records Per Split": { "name": "Records Per Split", "displayName": "Records Per Split", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "original", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "a961da8c-d228-3d19-b6ed-2d48ebe35b05", "instanceIdentifier": "15a87495-c9dc-36db-a3f0-828a63a688f9", "name": "Get 30 days historic data", "comments": "", "position": { "x": 861.9999979753956, "y": 966.9999983799049 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/${station_uuid}/W/measurements.json?start=P30D", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "26542ec9-e3e3-380f-ab7a-7fa4b2c46d1e", "instanceIdentifier": "815f05d7-0195-1000-0000-000005d97f79", "name": "PublishKafka", "comments": "", "position": { "x": 864.0, "y": 1408.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "snappy", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "measurements", "Kafka Key": null, "partition": null, "Kafka Connection Service": "29032623-5723-3b5d-8983-07534da27fd5", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "4db42754-1203-340d-830d-d662d16d13c8", "instanceIdentifier": "d8795306-ee83-3143-b633-fd70c932add5", "name": "Get station list", "comments": "", "position": { "x": 1237.9999979753957, "y": 246.99999837990495 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "15 m", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "PRIMARY", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "d2841e3c-954c-3f6c-8c2b-0b4f20cea21c", "instanceIdentifier": "a11d09f2-9d6d-390d-947c-397b881e980f", "name": "Get 30 minutes of historic data", "comments": "", "position": { "x": 1237.9999979753957, "y": 966.9999983799049 }, "type": "org.apache.nifi.processors.standard.InvokeHTTP", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-nar", "version": "2.6.0" }, "properties": { "Request Content-Encoding": "DISABLED", "proxy-configuration-service": null, "Request Multipart Form-Data Filename Enabled": "true", "Request Chunked Transfer-Encoding Enabled": "false", "Response Header Request Attributes Prefix": null, "HTTP/2 Disabled": "False", "Connection Timeout": "5 secs", "Response Cookie Strategy": "DISABLED", "Socket Read Timeout": "15 secs", "Socket Idle Connections": "5", "Request Body Enabled": "true", "HTTP URL": "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/${station_uuid}/W/measurements.json?start=PT30M", "Request OAuth2 Access Token Provider": null, "Socket Idle Timeout": "5 mins", "Response Redirects Enabled": "True", "Socket Write Timeout": "15 secs", "Request Header Attributes Pattern": null, "Response FlowFile Naming Strategy": "RANDOM", "Response Cache Enabled": "false", "Request Date Header Enabled": "True", "Request Failure Penalization Enabled": "false", "Response Body Attribute Size": "256", "SSL Context Service": null, "Response Generation Required": "false", "Request User-Agent": null, "Response Header Request Attributes Enabled": "false", "HTTP Method": "GET", "Request Username": null, "Request Content-Type": "${mime.type}", "Response Body Attribute Name": null, "Request Digest Authentication Enabled": "false", "Request Multipart Form-Data Name": null, "Response Cache Size": "10MB", "Response Body Ignored": "false" }, "propertyDescriptors": { "Request Content-Encoding": { "name": "Request Content-Encoding", "displayName": "Request Content-Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "proxy-configuration-service": { "name": "proxy-configuration-service", "displayName": "Proxy Configuration Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Filename Enabled": { "name": "Request Multipart Form-Data Filename Enabled", "displayName": "Request Multipart Form-Data Filename Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Chunked Transfer-Encoding Enabled": { "name": "Request Chunked Transfer-Encoding Enabled", "displayName": "Request Chunked Transfer-Encoding Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Prefix": { "name": "Response Header Request Attributes Prefix", "displayName": "Response Header Request Attributes Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP/2 Disabled": { "name": "HTTP/2 Disabled", "displayName": "HTTP/2 Disabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Connection Timeout": { "name": "Connection Timeout", "displayName": "Connection Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cookie Strategy": { "name": "Response Cookie Strategy", "displayName": "Response Cookie Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Password": { "name": "Request Password", "displayName": "Request Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Socket Read Timeout": { "name": "Socket Read Timeout", "displayName": "Socket Read Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Idle Connections": { "name": "Socket Idle Connections", "displayName": "Socket Idle Connections", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Body Enabled": { "name": "Request Body Enabled", "displayName": "Request Body Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP URL": { "name": "HTTP URL", "displayName": "HTTP URL", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request OAuth2 Access Token Provider": { "name": "Request OAuth2 Access Token Provider", "displayName": "Request OAuth2 Access Token Provider", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Socket Idle Timeout": { "name": "Socket Idle Timeout", "displayName": "Socket Idle Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Redirects Enabled": { "name": "Response Redirects Enabled", "displayName": "Response Redirects Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Socket Write Timeout": { "name": "Socket Write Timeout", "displayName": "Socket Write Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Header Attributes Pattern": { "name": "Request Header Attributes Pattern", "displayName": "Request Header Attributes Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response FlowFile Naming Strategy": { "name": "Response FlowFile Naming Strategy", "displayName": "Response FlowFile Naming Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Enabled": { "name": "Response Cache Enabled", "displayName": "Response Cache Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Date Header Enabled": { "name": "Request Date Header Enabled", "displayName": "Request Date Header Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Failure Penalization Enabled": { "name": "Request Failure Penalization Enabled", "displayName": "Request Failure Penalization Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Size": { "name": "Response Body Attribute Size", "displayName": "Response Body Attribute Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Response Generation Required": { "name": "Response Generation Required", "displayName": "Response Generation Required", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request User-Agent": { "name": "Request User-Agent", "displayName": "Request User-Agent", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Header Request Attributes Enabled": { "name": "Response Header Request Attributes Enabled", "displayName": "Response Header Request Attributes Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "HTTP Method": { "name": "HTTP Method", "displayName": "HTTP Method", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Username": { "name": "Request Username", "displayName": "Request Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Content-Type": { "name": "Request Content-Type", "displayName": "Request Content-Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Attribute Name": { "name": "Response Body Attribute Name", "displayName": "Response Body Attribute Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Digest Authentication Enabled": { "name": "Request Digest Authentication Enabled", "displayName": "Request Digest Authentication Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Request Multipart Form-Data Name": { "name": "Request Multipart Form-Data Name", "displayName": "Request Multipart Form-Data Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Cache Size": { "name": "Response Cache Size", "displayName": "Response Cache Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Response Body Ignored": { "name": "Response Body Ignored", "displayName": "Response Body Ignored", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "1 s", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "No Retry", "Retry", "Original", "Failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "f5aefb8c-ec8c-3895-a221-b1514bf49019", "instanceIdentifier": "815b69b0-0195-1000-ffff-ffff8e27806d", "name": "Produce station records", "comments": "", "position": { "x": 488.0, "y": 512.0 }, "type": "org.apache.nifi.kafka.processors.PublishKafka", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-nar", "version": "2.6.0" }, "properties": { "compression.type": "none", "acks": "all", "Message Demarcator": null, "Kafka Key Attribute Encoding": "utf-8", "Record Reader": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "Record Metadata Strategy": "FROM_PROPERTIES", "Transactional ID Prefix": null, "Header Encoding": "UTF-8", "max.request.size": "1 MB", "Topic Name": "stations", "Kafka Key": null, "partition": null, "Kafka Connection Service": "29032623-5723-3b5d-8983-07534da27fd5", "Publish Strategy": "USE_VALUE", "Record Key Writer": null, "Failure Strategy": "Route to Failure", "partitioner.class": "org.apache.kafka.clients.producer.internals.DefaultPartitioner", "Record Writer": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "Transactions Enabled": "false", "Message Key Field": null, "FlowFile Attribute Header Pattern": null }, "propertyDescriptors": { "compression.type": { "name": "compression.type", "displayName": "Compression Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "acks": { "name": "acks", "displayName": "Delivery Guarantee", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Demarcator": { "name": "Message Demarcator", "displayName": "Message Demarcator", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key Attribute Encoding": { "name": "Kafka Key Attribute Encoding", "displayName": "Kafka Key Attribute Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Reader": { "name": "Record Reader", "displayName": "Record Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Record Metadata Strategy": { "name": "Record Metadata Strategy", "displayName": "Record Metadata Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Transactional ID Prefix": { "name": "Transactional ID Prefix", "displayName": "Transactional ID Prefix", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Header Encoding": { "name": "Header Encoding", "displayName": "Header Encoding", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.request.size": { "name": "max.request.size", "displayName": "Max Request Size", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Topic Name": { "name": "Topic Name", "displayName": "Topic Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Key": { "name": "Kafka Key", "displayName": "Kafka Key", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partition": { "name": "partition", "displayName": "Partition", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Kafka Connection Service": { "name": "Kafka Connection Service", "displayName": "Kafka Connection Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Publish Strategy": { "name": "Publish Strategy", "displayName": "Publish Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Key Writer": { "name": "Record Key Writer", "displayName": "Record Key Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Failure Strategy": { "name": "Failure Strategy", "displayName": "Failure Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "partitioner.class": { "name": "partitioner.class", "displayName": "Partitioner Class", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Record Writer": { "name": "Record Writer", "displayName": "Record Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Transactions Enabled": { "name": "Transactions Enabled", "displayName": "Transactions Enabled", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Message Key Field": { "name": "Message Key Field", "displayName": "Message Key Field", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "FlowFile Attribute Header Pattern": { "name": "FlowFile Attribute Header Pattern", "displayName": "FlowFile Attribute Header Pattern", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "style": {}, "schedulingPeriod": "0 sec", "schedulingStrategy": "TIMER_DRIVEN", "executionNode": "ALL", "penaltyDuration": "30 sec", "yieldDuration": "1 sec", "bulletinLevel": "WARN", "runDurationMillis": 0, "concurrentlySchedulableTaskCount": 1, "autoTerminatedRelationships": [ "success", "failure" ], "scheduledState": "ENABLED", "retryCount": 10, "retriedRelationships": [], "backoffMechanism": "PENALIZE_FLOWFILE", "maxBackoffPeriod": "10 mins", "componentType": "PROCESSOR", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "inputPorts": [], "outputPorts": [], "connections": [ { "identifier": "1ed79459-2cd4-30cc-b246-7df8c512d6aa", "instanceIdentifier": "f458062a-4156-340b-99e1-2c9c1fd5691d", "name": "", "source": { "id": "4db42754-1203-340d-830d-d662d16d13c8", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get station list", "comments": "", "instanceIdentifier": "d8795306-ee83-3143-b633-fd70c932add5" }, "destination": { "id": "656d02d2-3100-39e6-a3dd-a8fe91b6dd06", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "cec0a8ff-73d7-35d1-9f9c-0c5cc0af6db2" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 1, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "6005f6e4-6a3f-379b-92bb-af654e9c13d8", "instanceIdentifier": "1b239318-886a-3f35-a3d4-c7a19aa52cad", "name": "", "source": { "id": "d56a1c61-9006-315a-a15c-41439f14d030", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "d78cc57f-9bd1-35a2-9957-a70d52d0fb69" }, "destination": { "id": "8809ece7-fbe0-3613-b7b0-77e05c8f4cb1", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "1425717b-a077-39b0-872e-7381d0b3848f" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "splits" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "ROUND_ROBIN", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "be649012-9cd8-3408-aef8-361c82058108", "instanceIdentifier": "8163d1b9-0195-1000-0000-000023899a37", "name": "", "source": { "id": "50bc20ed-2b1b-3068-0000-0000423c0a67", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "3c9c0c1f-db51-39f1-bcea-5aa511e75799" }, "destination": { "id": "98a12d17-c277-3226-af8b-03848dbdbf11", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "PublishKafka", "comments": "", "instanceIdentifier": "816125f7-0195-1000-0000-00006b8c4170" }, "labelIndex": 0, "zIndex": 0, "selectedRelationships": [ "success" ], "backPressureObjectThreshold": 20, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "18447f5e-4e45-39bc-80ac-86ef6083a913", "instanceIdentifier": "40d45abb-c0bb-3d35-a5e9-d4c28528445c", "name": "", "source": { "id": "ccf5a9db-6d16-3aa5-b054-b33a51405240", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "6304de41-531f-37e9-b1a9-db89a7181c46" }, "destination": { "id": "d2841e3c-954c-3f6c-8c2b-0b4f20cea21c", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 minutes of historic data", "comments": "", "instanceIdentifier": "a11d09f2-9d6d-390d-947c-397b881e980f" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "matched" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "d7a99464-402e-35fc-b090-3bc3d5fcb68a", "instanceIdentifier": "d5259744-57c7-3711-a0da-8114cb7db873", "name": "", "source": { "id": "8809ece7-fbe0-3613-b7b0-77e05c8f4cb1", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "1425717b-a077-39b0-872e-7381d0b3848f" }, "destination": { "id": "a961da8c-d228-3d19-b6ed-2d48ebe35b05", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 days historic data", "comments": "", "instanceIdentifier": "15a87495-c9dc-36db-a3f0-828a63a688f9" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "matched" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "3b89e1cf-29b9-3e53-bcc5-a58dc0db17a9", "instanceIdentifier": "296a4a6e-cf82-39bb-a329-9fc2a74652e7", "name": "", "source": { "id": "e85c2e60-192e-3ed8-ab64-750311e0ed45", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get station list", "comments": "", "instanceIdentifier": "46c0209c-7abe-3a8e-bbc0-39f9333f14b1" }, "destination": { "id": "f5aefb8c-ec8c-3895-a221-b1514bf49019", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Produce station records", "comments": "", "instanceIdentifier": "815b69b0-0195-1000-ffff-ffff8e27806d" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10000, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "0085c625-9d46-3f18-8d05-2d55c274a50e", "instanceIdentifier": "50823b83-873f-3bcd-b044-a85de2c53cf9", "name": "", "source": { "id": "656d02d2-3100-39e6-a3dd-a8fe91b6dd06", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "cec0a8ff-73d7-35d1-9f9c-0c5cc0af6db2" }, "destination": { "id": "ccf5a9db-6d16-3aa5-b054-b33a51405240", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Extract station_uuid", "comments": "", "instanceIdentifier": "6304de41-531f-37e9-b1a9-db89a7181c46" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "splits" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "ROUND_ROBIN", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "9424162b-ce44-33ee-8b7a-cfea386e47e4", "instanceIdentifier": "74f2322f-a826-39db-87e3-114ce6a576e4", "name": "", "source": { "id": "e2bdb78b-009b-3086-ad39-816874d3be80", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get station list", "comments": "", "instanceIdentifier": "72294ac8-46e9-33fb-8923-8e6cb4c69269" }, "destination": { "id": "d56a1c61-9006-315a-a15c-41439f14d030", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "SplitRecord", "comments": "", "instanceIdentifier": "d78cc57f-9bd1-35a2-9957-a70d52d0fb69" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 1, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "776daaa4-a1f6-38a7-b233-2102ddf589d8", "instanceIdentifier": "fbb55c02-33f9-3651-8e7d-f55f264e0514", "name": "", "source": { "id": "d2841e3c-954c-3f6c-8c2b-0b4f20cea21c", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 minutes of historic data", "comments": "", "instanceIdentifier": "a11d09f2-9d6d-390d-947c-397b881e980f" }, "destination": { "id": "50bc20ed-2b1b-3068-0000-0000423c0a67", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "3c9c0c1f-db51-39f1-bcea-5aa511e75799" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "82121195-d4b9-37e9-9994-87a6d890cc71", "instanceIdentifier": "8162fee0-0195-1000-ffff-ffff961b93ba", "name": "", "source": { "id": "dde01269-6b44-3f4c-9406-8e291cd8aaa4", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "816243be-0195-1000-ffff-fffff00620a1" }, "destination": { "id": "26542ec9-e3e3-380f-ab7a-7fa4b2c46d1e", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "PublishKafka", "comments": "", "instanceIdentifier": "815f05d7-0195-1000-0000-000005d97f79" }, "labelIndex": 0, "zIndex": 0, "selectedRelationships": [ "success" ], "backPressureObjectThreshold": 20, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "e911351c-a4a5-3a14-9c74-ebd96eef0f8d", "instanceIdentifier": "8b7cc62b-560c-3b8e-903a-f9572ac50df8", "name": "", "source": { "id": "a961da8c-d228-3d19-b6ed-2d48ebe35b05", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Get 30 days historic data", "comments": "", "instanceIdentifier": "15a87495-c9dc-36db-a3f0-828a63a688f9" }, "destination": { "id": "dde01269-6b44-3f4c-9406-8e291cd8aaa4", "type": "PROCESSOR", "groupId": "5bb5c008-b432-3d6f-b99e-fedc455bd418", "name": "Add station_uuid", "comments": "", "instanceIdentifier": "816243be-0195-1000-ffff-fffff00620a1" }, "labelIndex": 1, "zIndex": 0, "selectedRelationships": [ "Response" ], "backPressureObjectThreshold": 10, "backPressureDataSizeThreshold": "1 GB", "flowFileExpiration": "0 sec", "prioritizers": [], "bends": [], "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", "partitioningAttribute": "", "loadBalanceCompression": "DO_NOT_COMPRESS", "componentType": "CONNECTION", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "labels": [ { "identifier": "10ab1424-3268-3b7f-9e4e-d843df2427cd", "instanceIdentifier": "a57103e7-30b7-38d7-bb6c-f80b4dc4a710", "position": { "x": 485.99999797539556, "y": 174.99999837990495 }, "label": "Water levels data", "zIndex": 0, "width": 1104.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "938fbab6-21ee-347f-814a-b0016b7405b3", "instanceIdentifier": "99926082-4766-3223-8332-3f4affeae76b", "position": { "x": 1237.9999979753957, "y": 214.99999837990495 }, "label": "Stream real-time data", "zIndex": 0, "width": 152.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "b80512f7-0274-3712-8884-d6b31555927a", "instanceIdentifier": "7ef5e570-ca1c-3a70-abf7-9749db121fbc", "position": { "x": 485.99999797539556, "y": 214.99999837990495 }, "label": "Ingest station records", "zIndex": 0, "width": 152.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "4524d905-b8c4-32f6-ae83-4ecc54f95bfa", "instanceIdentifier": "a501f0f6-3372-3444-829c-2109de521069", "position": { "x": 861.9999979753956, "y": 214.99999837990495 }, "label": "Ingest historic data", "zIndex": 0, "width": 152.0, "height": 24.0, "style": { "font-size": "12px" }, "componentType": "LABEL", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "funnels": [], "controllerServices": [ { "identifier": "a43e5844-29fd-3ad4-8f84-5cfb771da897", "instanceIdentifier": "3213e3ae-00c3-3dd0-a838-770a15dc68e0", "name": "StandardRestrictedSSLContextService", "comments": "", "type": "org.apache.nifi.ssl.StandardRestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-ssl-context-service-nar", "version": "2.6.0" }, "properties": { "Truststore Type": "PKCS12", "Truststore Password": "secret", "SSL Protocol": "TLSv1.3", "Keystore Type": "PKCS12", "Keystore Password": "secret", "Truststore Filename": "/stackable/keystore/truststore.p12", "Keystore Filename": "/stackable/keystore/keystore.p12" }, "propertyDescriptors": { "Truststore Type": { "name": "Truststore Type", "displayName": "Truststore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Protocol": { "name": "SSL Protocol", "displayName": "TLS Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Keystore Type": { "name": "Keystore Type", "displayName": "Keystore Type", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Truststore Filename": { "name": "Truststore Filename", "displayName": "Truststore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } }, "Keystore Password": { "name": "Keystore Password", "displayName": "Keystore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "key-password": { "name": "key-password", "displayName": "Key Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Truststore Password": { "name": "Truststore Password", "displayName": "Truststore Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "Keystore Filename": { "name": "Keystore Filename", "displayName": "Keystore Filename", "identifiesControllerService": false, "sensitive": false, "dynamic": false, "resourceDefinition": { "cardinality": "SINGLE", "resourceTypes": [ "FILE" ] } } }, "controllerServiceApis": [ { "type": "org.apache.nifi.ssl.SSLContextProvider", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.SSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } }, { "type": "org.apache.nifi.ssl.RestrictedSSLContextService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "f6b7ad0f-da95-39c4-be8d-4ae944d8034b", "instanceIdentifier": "ca38b3a6-868b-33f0-a858-30da336cc679", "name": "JsonRecordSetWriter", "type": "org.apache.nifi.json.JsonRecordSetWriter", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "Allow Scientific Notation": "false", "compression-level": "1", "schema-cache": null, "Timestamp Format": null, "Date Format": null, "Pretty Print JSON": "false", "compression-format": "none", "Schema Write Strategy": "no-schema", "suppress-nulls": "never-suppress", "output-grouping": "output-array", "schema-name": "${schema.name}", "schema-registry": null, "Time Format": null, "schema-access-strategy": "inherit-record-schema", "schema-version": null, "schema-text": "${avro.schema}", "Schema Reference Writer": null }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Allow Scientific Notation": { "name": "Allow Scientific Notation", "displayName": "Allow Scientific Notation", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-level": { "name": "compression-level", "displayName": "Compression Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-cache": { "name": "schema-cache", "displayName": "Schema Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Pretty Print JSON": { "name": "Pretty Print JSON", "displayName": "Pretty Print JSON", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "compression-format": { "name": "compression-format", "displayName": "Compression Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Write Strategy": { "name": "Schema Write Strategy", "displayName": "Schema Write Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "suppress-nulls": { "name": "suppress-nulls", "displayName": "Suppress Null Values", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "output-grouping": { "name": "output-grouping", "displayName": "Output Grouping", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Schema Reference Writer": { "name": "Schema Reference Writer", "displayName": "Schema Reference Writer", "identifiesControllerService": true, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordSetWriterFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "e75c34eb-8e60-3b6b-8a29-3dd7b79776c4", "instanceIdentifier": "2d152882-2f62-3e45-8c8e-5f3127f8b931", "name": "JsonTreeReader", "type": "org.apache.nifi.json.JsonTreeReader", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-record-serialization-services-nar", "version": "2.6.0" }, "properties": { "schema-reference-reader": null, "schema-branch": null, "Max String Length": "20 MB", "schema-application-strategy": "SELECTED_PART", "Timestamp Format": null, "schema-inference-cache": null, "Date Format": null, "schema-name": "${schema.name}", "starting-field-strategy": "ROOT_NODE", "schema-registry": null, "starting-field-name": null, "Time Format": null, "schema-access-strategy": "infer-schema", "schema-version": null, "schema-text": "${avro.schema}", "Allow Comments": "false" }, "propertyDescriptors": { "schema-reference-reader": { "name": "schema-reference-reader", "displayName": "Schema Reference Reader", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "schema-branch": { "name": "schema-branch", "displayName": "Schema Branch", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Max String Length": { "name": "Max String Length", "displayName": "Max String Length", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-application-strategy": { "name": "schema-application-strategy", "displayName": "Schema Application Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Timestamp Format": { "name": "Timestamp Format", "displayName": "Timestamp Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-inference-cache": { "name": "schema-inference-cache", "displayName": "Schema Inference Cache", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "Date Format": { "name": "Date Format", "displayName": "Date Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-name": { "name": "schema-name", "displayName": "Schema Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "starting-field-strategy": { "name": "starting-field-strategy", "displayName": "Starting Field Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-registry": { "name": "schema-registry", "displayName": "Schema Registry", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "starting-field-name": { "name": "starting-field-name", "displayName": "Starting Field Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Time Format": { "name": "Time Format", "displayName": "Time Format", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-access-strategy": { "name": "schema-access-strategy", "displayName": "Schema Access Strategy", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-version": { "name": "schema-version", "displayName": "Schema Version", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "schema-text": { "name": "schema-text", "displayName": "Schema Text", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "Allow Comments": { "name": "Allow Comments", "displayName": "Allow Comments", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.serialization.RecordReaderFactory", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-standard-services-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" }, { "identifier": "29032623-5723-3b5d-8983-07534da27fd5", "instanceIdentifier": "815ba7c0-0195-1000-0000-00002ff4760b", "name": "Kafka3ConnectionService", "comments": "", "type": "org.apache.nifi.kafka.service.Kafka3ConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-3-service-nar", "version": "2.6.0" }, "properties": { "security.protocol": "SSL", "SSL Context Service": "a43e5844-29fd-3ad4-8f84-5cfb771da897", "ack.wait.time": "5 sec", "sasl.username": null, "max.poll.records": "10000", "sasl.mechanism": "GSSAPI", "isolation.level": "read_committed", "max.block.ms": "5 sec", "bootstrap.servers": "kafka-broker-default-headless.default.svc.cluster.local:9093", "kerberos-user-service": null, "sasl.kerberos.service.name": null, "default.api.timeout.ms": "60 sec" }, "propertyDescriptors": { "ack.wait.time": { "name": "ack.wait.time", "displayName": "Acknowledgment Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.username": { "name": "sasl.username", "displayName": "SASL Username", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.poll.records": { "name": "max.poll.records", "displayName": "Max Poll Records", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "bootstrap.servers": { "name": "bootstrap.servers", "displayName": "Bootstrap Servers", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "sasl.kerberos.service.name": { "name": "sasl.kerberos.service.name", "displayName": "Kerberos Service Name", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "security.protocol": { "name": "security.protocol", "displayName": "Security Protocol", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "SSL Context Service": { "name": "SSL Context Service", "displayName": "SSL Context Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.mechanism": { "name": "sasl.mechanism", "displayName": "SASL Mechanism", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "isolation.level": { "name": "isolation.level", "displayName": "Transaction Isolation Level", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "max.block.ms": { "name": "max.block.ms", "displayName": "Max Metadata Wait Time", "identifiesControllerService": false, "sensitive": false, "dynamic": false }, "kerberos-user-service": { "name": "kerberos-user-service", "displayName": "Kerberos User Service", "identifiesControllerService": true, "sensitive": false, "dynamic": false }, "sasl.password": { "name": "sasl.password", "displayName": "SASL Password", "identifiesControllerService": false, "sensitive": true, "dynamic": false }, "default.api.timeout.ms": { "name": "default.api.timeout.ms", "displayName": "Client Timeout", "identifiesControllerService": false, "sensitive": false, "dynamic": false } }, "controllerServiceApis": [ { "type": "org.apache.nifi.kafka.service.api.KafkaConnectionService", "bundle": { "group": "org.apache.nifi", "artifact": "nifi-kafka-service-api-nar", "version": "2.6.0" } } ], "scheduledState": "DISABLED", "bulletinLevel": "WARN", "componentType": "CONTROLLER_SERVICE", "groupIdentifier": "5bb5c008-b432-3d6f-b99e-fedc455bd418" } ], "defaultFlowFileExpiration": "0 sec", "defaultBackPressureObjectThreshold": 10000, "defaultBackPressureDataSizeThreshold": "1 GB", "scheduledState": "ENABLED", "executionEngine": "INHERITED", "maxConcurrentTasks": 1, "statelessFlowTimeout": "1 min", "flowFileConcurrency": "UNBOUNDED", "flowFileOutboundPolicy": "STREAM_WHEN_AVAILABLE", "componentType": "PROCESS_GROUP" }, "externalControllerServices": {}, "parameterContexts": {}, "flowEncodingVersion": "1.0", "parameterProviders": {}, "latest": false } From 2a8966f74e9f25ca238204804e7b129a62b816f7 Mon Sep 17 00:00:00 2001 From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> Date: Tue, 21 Oct 2025 13:54:35 +0200 Subject: [PATCH 8/8] re-add topics image --- .../topics.png | Bin 0 -> 64898 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/modules/demos/images/nifi-kafka-druid-water-level-data/topics.png diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/topics.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/topics.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9107d3b02e8aebb0058db2a0c1a14d5d1c5768 GIT binary patch literal 64898 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

q)F=q|1(U7UoRTl4Z$HKf85-- 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