SlideShare a Scribd company logo
Spark Streaming
Kafka in Action
Dori Waldman
Big Data Lead
 Spark Streaming with Kafka – Receiver Based
 Spark Streaming with Kafka – Direct (No Receiver)
 Statefull Spark Streaming (Demo)
Agenda
What we do … Ad-Exchange
Real time trading (150ms average response time) and optimize campaigns
over ad spaces.
Tech Stack :
Why Spark ...
Use Case
Tens of Millions of transactions per minute (and growing …)
~ 15TB daily (24/7 99.99999 resiliency)
Data Aggregation: (#Video Success Rate)
Real time Aggregation and DB update
Raw data persistency as recovery backup
Retrospective aggregation updates (recalculate)
Analytic Data :
 Persist incoming events (Raw data persistency)
 Real time analytics and ML algorithm (inside)
Spark stream - Kafka
 Based on high-level Kafka consumer
 The receiver stores Kafka messages in executors/workers
 Write-Ahead Logs to recover data on failures – Recommended
 ZK offsets are updated by Spark
 Data duplication (WAL/Kafka)
Receiver Approach - ”KafkaUtils.createStream”
Receiver Approach - Code
Spark Partition != Kafka Partition
val kafkaStream = { …
Basic
Advanced
Receiver Approach – Code (continue)
Architecture 1.0
Stream
Events
Events
Raw Data
Events
Consumer
Consumer
Aggregation
Aggregation
Spark Batch
Spark Stream
Architecture
Pros:
 Worked just fine with single MySQL server
 Simplicity – legacy code stays the same
 Real-time DB updates
 Partial Aggregation was done in Spark, DB was updated via
“Insert On Duplicate Key Update”
Cons:
 MySQL limitations (MySQL sharding is an issue, Cassandra is optimal)
 S3 raw data (in standard formats) is not trivial when using Spark
Monitoring
Spark stream - Kafka
Architecture 2.0
Stream
Events
Events
Raw Data
Events
starts from largest “offset” by default
– columnar format (FS not DB)
atch update C* every few minutes (overwrite)
Consumer
Consumer
Raw Data
Raw Data
Aggregation
Architecture
Pros:
 Parquet is ideal for Spark analytics
 Backup data requires less disk space
Cons:
 DB is not updated in real time (streaming), we could use combination with
MySQL for current hour...
What has been changed:
 C* uses counters for “sum/update” which is a “bad” practice
(no “insert on duplicate key” using MySQL)
 Parquet conversion is a heavy job and it seems that streaming hourly
conversions (using batch in case of failure) is a better approach
Direct Approach – ”KafkaUtils.createDirectStream”
 Based on Kafka simple consumer
 Queries Kafka for the latest offsets in each topic+partition, define offset range for batch
 No need to create multiple input Kafka streams and consolidate them
 Spark creates an RDD partition for each Kafka
partition so data is consumed in parallel
 ZK offsets are not updated by Spark, offsets are
tracked by Spark within its checkpoints (might not
recover)
 No data duplication (no WAL)
 S3 / HDFS
 Save metadata – needed for recovery from driver failures
 RDD for statefull transformations (RDDs of previous batches)
Checkpoint...
Transfer data from driver to workers
Broadcast -
keep a read-only variable cached on each machine rather than shipping a copy of it with tasks
Accumulator - used to implement counters/sum, workers can only add to accumulator, driver can read its
value (you can extends AccumulatorParam[Vector])
Static (Scala Object)
Context (rdd) – get data after recovery
Direct Approach - Code
def start(sparkConfig: SparkConfiguration, decoder: String) {
val ssc = StreamingContext.getOrCreate(sparkCheckpointDirectory(sparkConfig),()=>functionToCreateContext(decoder,sparkConfig))
sys.ShutdownHookThread {
ssc.stop(stopSparkContext = true, stopGracefully = true)
}
ssc.start()
ssc.awaitTermination()
}
In house code
def functionToCreateContext(decoder: String,sparkConfig: SparkConfiguration ):StreamingContext = {
val sparkConf = new SparkConf().setMaster(sparkClusterHost).setAppName(sparkConfig.jobName)
sparkConf.set(S3_KEY, sparkConfig.awsKey)
sparkConf.set(S3_CREDS, sparkConfig.awsSecret)
sparkConf.set(PARQUET_OUTPUT_DIRECTORY, sparkConfig.parquetOutputDirectory)
val sparkContext = SparkContext.getOrCreate(sparkConf)
// Hadoop S3 writer optimization
sparkContext.hadoopConfiguration.set("spark.sql.parquet.output.committer.class",
"org.apache.spark.sql.parquet.DirectParquetOutputCommitter")
// Same as Avro, Parquet also supports schema evolution. This work happens in driver and takes
// relativly long time
sparkContext.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")
sparkContext.hadoopConfiguration.setInt("parquet.metadata.read.parallelism", 100)
val ssc = new StreamingContext(sparkContext, Seconds(sparkConfig.batchTime))
ssc.checkpoint(sparkCheckpointDirectory(sparkConfig))
In house code (continue)
// evaluate stream value happened only if checkpoint folder is not exist
val streams = sparkConfig.kafkaConfig.streams map { c =>
val topic = c.topic.split(",").toSet
KafkaUtils.createDirectStream[String, String, StringDecoder, JsonDecoder](ssc, c.kafkaParams, topic)
}
streams.foreach { dsStream => {
dsStream.foreachRDD { rdd =>
val offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
for (o <- offsetRanges) {
logInfo(s"Offset on the driver: ${offsetRanges.mkString}")
}
val sqlContext = SQLContext.getOrCreate(rdd.sparkContext)
sqlContext.setConf("spark.sql.parquet.compression.codec", "snappy")
// Data recovery after crash
val s3Accesskey = rdd.context.getConf.get(S3_KEY)
val s3SecretKey = rdd.context.getConf.get(S3_CREDS)
val outputDirectory = rdd.context.getConf.get(PARQUET_OUTPUT_DIRECTORY)
In house code (continue)
val data = sqlContext.read.json(rdd.map(_._2))
val carpetData = data.count()
if (carpetData > 0) {
// coalesce(1) – Data transfer optimization during shuffle
data.coalesce(1).write.mode(SaveMode.Append).partitionBy "day", "hour").parquet(“s3a//...")
// In case of S3Exception will not continue to update ZK.
zk.updateNode(o.topic, o.partition.toString, kafkaConsumerGroup, o.untilOffset.toString.getBytes)
}
}
}
}
ssc
}
In house code (continue)
SaveMode (Append/Overwrite) used to handle exist data (add new file / overwrite)
Spark Streaming does not update ZK (http://curator.apache.org/)
Spark Streaming saves offset in its checkpoint folder. Once it crashes it will continue from the last
offset
You can avoid using checkpoint for offsets and manage it manually
Config...
val sparkConf = new SparkConf().setMaster("local[4]").setAppName("demo")
val sparkContext = SparkContext.getOrCreate(sparkConf)
val sqlContext = SQLContext.getOrCreate(sparkContext)
val data = sqlContext.read.json(path)
data.coalesce(1).write.mode(SaveMode.Overwrite).partitionBy("table", "day") parquet (outputFolder)
Batch Code
 Built in support for backpressure Since Spark 1.5 (default is disabled)
 Reciever – spark.streaming.receiver.maxRate
 Direct – spark.streaming.kafka.maxRatePerPartition
Back Pressure
https://www.youtube.com/watch?v=fXnNEq1v3VA&list=PL-x35fyliRwgfhffEpywn4q23ykotgQJ6&index=16
http://spark.apache.org/docs/latest/streaming-kafka-integration.html
https://spark.apache.org/docs/1.6.0/streaming-programming-guide.html
http://spark.apache.org/docs/latest/streaming-programming-guide.html#deploying-applications
http://blog.cloudera.com/blog/2015/03/exactly-once-spark-streaming-from-apache-kafka/
http://www.michael-noll.com/blog/2014/10/01/kafka-spark-streaming-integration-example-tutorial/
http://koeninger.github.io/kafka-exactly-once/#1
http://www.slideshare.net/miguno/being-ready-for-apache-kafka-apache-big-data-europe-2015
http://www.slideshare.net/SparkSummit/recipes-for-running-spark-streaming-apploications-in-production-tathagata-daspptx
http://www.slideshare.net/databricks/strata-sj-everyday-im-shuffling-tips-for-writing-better-spark-programs
https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/6-CacheAndCheckpoint.md
https://dzone.com/articles/uniting-spark-parquet-and-s3-as-an-alternative-to
http://blog.cloudera.com/blog/2013/10/parquet-at-salesforce-com/
https://www.appsflyer.com/blog/the-bleeding-edge-spark-parquet-and-s3/
Links – Spark & Kafka integration
Architecture – other spark options
We can use hourly window , do the aggregation in spark and overwrite C* raw in real time …
https://databricks.com/blog/2016/02/01/faster-stateful-stream-processing-in-spark-
streaming.html
https://docs.cloud.databricks.com/docs/spark/1.6/examples/Streaming%20mapWithState.html
Stateful Spark Streaming
Architecture 3.0
Stream
Events
Events
Raw Data
Events
Consumer
Consumer
Raw Data
Aggregation
Aggregation
Raw Data
Analytic data uses spark stream to transfer Kafka raw data to Parquet.
Regular Kafka consumer saves raw data backup in S3 (for streaming failure, spark
batch will convert them to parquet)
Aggregation data uses statefull Spark Streaming (mapWithState) to update C*
In case streaming failure spark batch will update data from Parquet to C*
Architecture
Pros:
Real-time DB updates
Cons:
 Too many components, relatively expensive (comparing to phase 1)
 According to documentation Spark upgrade has an issue with checkpoint
http://www.slideshare.net/planetcassandra/tuplejump-breakthrough-olap-performance-on-cassandra-and-spark?
ref=http://www.planetcassandra.org/blog/introducing-filodb/
Whats Next … FiloDB ? (probably
not , lots of nodes)
Parquet performance based on C*
Questions?
val ssc = new StreamingContext(sparkConfig.sparkConf, Seconds(batchTime))
val kafkaStreams = (1 to sparkConfig.workers) map {
i => new
FixedKafkaInputDStream[String, AggregationEvent, StringDecoder,
SerializedDecoder[AggregationEvent]](ssc,
kafkaConfiguration.kafkaMapParams,
topicMap,
StorageLevel.MEMORY_ONLY_SER).map(_._2) // for write ahead log
}
val unifiedStream = ssc.union(kafkaStreams) // manage all streams as one
val mapped = unifiedStream flatMap {
event => Aggregations.getEventAggregationsKeysAndValues(Option(event))
// convert event to aggregation object which contains
//key (“advertiserId”, “countryId”) and values (“click”, “impression”)
}
val reduced = mapped.reduceByKey {
_ + _ // per aggregation type we created “+” method that
//describe how to do the aggregation
}
K1 =
advertiserId = 5
countryId = 8
V1 =
clicks = 2
impression = 17
k1(e), v1(e)
k1(e), v2(e)
k2(e), v3(e)
k1(e), v1+v2
k2(e), v3(e)
In house Code –
Kafka messages semantics
(offset)

More Related Content

What's hot (20)

PDF
A dive into akka streams: from the basics to a real-world scenario
Gioia Ballin
 
PPTX
Profiling & Testing with Spark
Roger Rafanell Mas
 
PDF
Spark summit2014 techtalk - testing spark
Anu Shetty
 
PDF
HBase RowKey design for Akka Persistence
Konrad Malawski
 
PDF
Spotify: Automating Cassandra repairs
DataStax Academy
 
PDF
Heat optimization
Rico Lin
 
PDF
Unit testing of spark applications
Knoldus Inc.
 
PPT
Reactive programming with examples
Peter Lawrey
 
PPTX
Realtime Statistics based on Apache Storm and RocketMQ
Xin Wang
 
PDF
Why your Spark job is failing
Sandy Ryza
 
PDF
Distributed real time stream processing- why and how
Petr Zapletal
 
PDF
Distributed Real-Time Stream Processing: Why and How 2.0
Petr Zapletal
 
PPTX
Asynchronous Orchestration DSL on squbs
Anil Gursel
 
PPT
Find bottleneck and tuning in Java Application
guest1f2740
 
PDF
Apache MXNet Distributed Training Explained In Depth by Viacheslav Kovalevsky...
Big Data Spain
 
ODP
Performance Optimization of Rails Applications
Serge Smetana
 
PDF
Monitoring with Prometheus
Shiao-An Yuan
 
PPT
Spark and spark streaming internals
Sigmoid
 
PDF
Rails Application Optimization Techniques & Tools
guest05c09d
 
PDF
Virtual Bash! A Lunchtime Introduction to Kafka
Jason Bell
 
A dive into akka streams: from the basics to a real-world scenario
Gioia Ballin
 
Profiling & Testing with Spark
Roger Rafanell Mas
 
Spark summit2014 techtalk - testing spark
Anu Shetty
 
HBase RowKey design for Akka Persistence
Konrad Malawski
 
Spotify: Automating Cassandra repairs
DataStax Academy
 
Heat optimization
Rico Lin
 
Unit testing of spark applications
Knoldus Inc.
 
Reactive programming with examples
Peter Lawrey
 
Realtime Statistics based on Apache Storm and RocketMQ
Xin Wang
 
Why your Spark job is failing
Sandy Ryza
 
Distributed real time stream processing- why and how
Petr Zapletal
 
Distributed Real-Time Stream Processing: Why and How 2.0
Petr Zapletal
 
Asynchronous Orchestration DSL on squbs
Anil Gursel
 
Find bottleneck and tuning in Java Application
guest1f2740
 
Apache MXNet Distributed Training Explained In Depth by Viacheslav Kovalevsky...
Big Data Spain
 
Performance Optimization of Rails Applications
Serge Smetana
 
Monitoring with Prometheus
Shiao-An Yuan
 
Spark and spark streaming internals
Sigmoid
 
Rails Application Optimization Techniques & Tools
guest05c09d
 
Virtual Bash! A Lunchtime Introduction to Kafka
Jason Bell
 

Viewers also liked (20)

PPT
Spark streaming with kafka
Dori Waldman
 
PDF
Apache Spark Streaming
Bartosz Jankiewicz
 
PPTX
Dori waldman android _course
Dori Waldman
 
PDF
Bellevue Big Data meetup: Dive Deep into Spark Streaming
Santosh Sahoo
 
PPTX
Guest Lecture on Spark Streaming in Stanford CME 323: Distributed Algorithms ...
Tathagata Das
 
PDF
Data Storage Tips for Optimal Spark Performance-(Vida Ha, Databricks)
Spark Summit
 
PDF
Exactly-Once Streaming from Kafka-(Cody Koeninger, Kixer)
Spark Summit
 
PPTX
Intro to Big Data Analytics using Apache Spark and Apache Zeppelin
Alex Zeltov
 
PPTX
Security From The Big Data and Analytics Perspective
All Things Open
 
PPTX
2016 Cybersecurity Analytics State of the Union
Cloudera, Inc.
 
PDF
Introduction to Spark Streaming
datamantra
 
PDF
Detecting Events on the Web in Real Time with Java, Kafka and ZooKeeper - Jam...
JAXLondon2014
 
PPTX
Dori waldman android _course_2
Dori Waldman
 
PPSX
Apache metron - An Introduction
Baban Gaigole
 
ODP
Meet Up - Spark Stream Processing + Kafka
Knoldus Inc.
 
PDF
Blockchains and Adult Education
John Domingue
 
PDF
Blockchains a new platform for semantically enabled transactions public
John Domingue
 
ODP
Introduction to Apache Kafka- Part 1
Knoldus Inc.
 
PPTX
Online learning with structured streaming, spark summit brussels 2016
Ram Sriharsha
 
PDF
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
Guozhang Wang
 
Spark streaming with kafka
Dori Waldman
 
Apache Spark Streaming
Bartosz Jankiewicz
 
Dori waldman android _course
Dori Waldman
 
Bellevue Big Data meetup: Dive Deep into Spark Streaming
Santosh Sahoo
 
Guest Lecture on Spark Streaming in Stanford CME 323: Distributed Algorithms ...
Tathagata Das
 
Data Storage Tips for Optimal Spark Performance-(Vida Ha, Databricks)
Spark Summit
 
Exactly-Once Streaming from Kafka-(Cody Koeninger, Kixer)
Spark Summit
 
Intro to Big Data Analytics using Apache Spark and Apache Zeppelin
Alex Zeltov
 
Security From The Big Data and Analytics Perspective
All Things Open
 
2016 Cybersecurity Analytics State of the Union
Cloudera, Inc.
 
Introduction to Spark Streaming
datamantra
 
Detecting Events on the Web in Real Time with Java, Kafka and ZooKeeper - Jam...
JAXLondon2014
 
Dori waldman android _course_2
Dori Waldman
 
Apache metron - An Introduction
Baban Gaigole
 
Meet Up - Spark Stream Processing + Kafka
Knoldus Inc.
 
Blockchains and Adult Education
John Domingue
 
Blockchains a new platform for semantically enabled transactions public
John Domingue
 
Introduction to Apache Kafka- Part 1
Knoldus Inc.
 
Online learning with structured streaming, spark summit brussels 2016
Ram Sriharsha
 
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
Guozhang Wang
 
Ad

Similar to Spark stream - Kafka (20)

PPTX
Leveraging Azure Databricks to minimize time to insight by combining Batch an...
Microsoft Tech Community
 
PPTX
Stream, stream, stream: Different streaming methods with Spark and Kafka
Itai Yaffe
 
PDF
Avoiding Common Pitfalls: Spark Structured Streaming with Kafka
HostedbyConfluent
 
PDF
Structured Streaming with Kafka
datamantra
 
PPT
Stream, Stream, Stream: Different Streaming Methods with Spark and Kafka
DataWorks Summit
 
PDF
Making Structured Streaming Ready for Production
Databricks
 
PDF
Stream, Stream, Stream: Different Streaming Methods with Apache Spark and Kafka
Databricks
 
PDF
What's new with Apache Spark's Structured Streaming?
Miklos Christine
 
PDF
Easy, scalable, fault tolerant stream processing with structured streaming - ...
Databricks
 
PDF
Strata NYC 2015: What's new in Spark Streaming
Databricks
 
PDF
Apache Spark 2.0: A Deep Dive Into Structured Streaming - by Tathagata Das
Databricks
 
PDF
Writing Continuous Applications with Structured Streaming Python APIs in Apac...
Databricks
 
PPTX
Meetup spark structured streaming
José Carlos García Serrano
 
PPTX
Productionalizing spark streaming applications
Robert Sanders
 
PDF
Writing Continuous Applications with Structured Streaming in PySpark
Databricks
 
PDF
Productizing Structured Streaming Jobs
Databricks
 
PDF
Spark streaming state of the union
Databricks
 
PDF
Real-Time Data Pipelines Made Easy with Structured Streaming in Apache Spark.pdf
nilanjan172nsvian
 
PDF
Top 5 mistakes when writing Streaming applications
hadooparchbook
 
PDF
The Top Five Mistakes Made When Writing Streaming Applications with Mark Grov...
Databricks
 
Leveraging Azure Databricks to minimize time to insight by combining Batch an...
Microsoft Tech Community
 
Stream, stream, stream: Different streaming methods with Spark and Kafka
Itai Yaffe
 
Avoiding Common Pitfalls: Spark Structured Streaming with Kafka
HostedbyConfluent
 
Structured Streaming with Kafka
datamantra
 
Stream, Stream, Stream: Different Streaming Methods with Spark and Kafka
DataWorks Summit
 
Making Structured Streaming Ready for Production
Databricks
 
Stream, Stream, Stream: Different Streaming Methods with Apache Spark and Kafka
Databricks
 
What's new with Apache Spark's Structured Streaming?
Miklos Christine
 
Easy, scalable, fault tolerant stream processing with structured streaming - ...
Databricks
 
Strata NYC 2015: What's new in Spark Streaming
Databricks
 
Apache Spark 2.0: A Deep Dive Into Structured Streaming - by Tathagata Das
Databricks
 
Writing Continuous Applications with Structured Streaming Python APIs in Apac...
Databricks
 
Meetup spark structured streaming
José Carlos García Serrano
 
Productionalizing spark streaming applications
Robert Sanders
 
Writing Continuous Applications with Structured Streaming in PySpark
Databricks
 
Productizing Structured Streaming Jobs
Databricks
 
Spark streaming state of the union
Databricks
 
Real-Time Data Pipelines Made Easy with Structured Streaming in Apache Spark.pdf
nilanjan172nsvian
 
Top 5 mistakes when writing Streaming applications
hadooparchbook
 
The Top Five Mistakes Made When Writing Streaming Applications with Mark Grov...
Databricks
 
Ad

More from Dori Waldman (9)

PDF
Introduction to AI agent development with MCP
Dori Waldman
 
PPTX
openai.pptx
Dori Waldman
 
PPTX
iceberg introduction.pptx
Dori Waldman
 
PDF
spark stream - kafka - the right way
Dori Waldman
 
PDF
Druid meetup @walkme
Dori Waldman
 
PDF
Machine Learning and Deep Learning 4 dummies
Dori Waldman
 
PDF
Druid
Dori Waldman
 
PDF
Memcached
Dori Waldman
 
PDF
Big data should be simple
Dori Waldman
 
Introduction to AI agent development with MCP
Dori Waldman
 
openai.pptx
Dori Waldman
 
iceberg introduction.pptx
Dori Waldman
 
spark stream - kafka - the right way
Dori Waldman
 
Druid meetup @walkme
Dori Waldman
 
Machine Learning and Deep Learning 4 dummies
Dori Waldman
 
Memcached
Dori Waldman
 
Big data should be simple
Dori Waldman
 

Recently uploaded (20)

PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PDF
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 

Spark stream - Kafka