Streams (Kafka, Kinesis, and More)
Many teams already have streaming infrastructure (Kafka, Kinesis, Cribl, and others) feeding their data lakes and data warehouses. Scanner can tap into these same streams without requiring you to build or operate any new stream consumers.
The idea is simple: every major streaming platform can be configured to deliver its data to an S3 bucket. You point your stream's S3 sink at a bucket that Scanner is linked to, and Scanner indexes the files as they arrive.
How It Works
Your stream (Kafka, Kinesis, etc.)
|
v
S3 sink connector / delivery stream
|
v
Collect buffer S3 bucket (7-day lifecycle)
|
v
Scanner Collect (indexes files via s3:ObjectCreated notifications)The S3 bucket acts as a collect buffer: a temporary landing zone where stream data is housed only while indexing takes place. A lifecycle policy expires objects after 7 days, so you are not duplicating your raw stream data in S3 forever. The collect buffer stays small while Scanner's index retains the searchable data.
Supported Streaming Platforms
Kafka Connect with an S3 sink connector
Amazon Data Firehose
Amazon Data Firehose or MSK Connect
Fully-managed Amazon S3 Sink connector
Built-in Amazon S3 destination
Kafka Connect S3 sink or Redpanda Connect
Other Kafka API-compatible services (e.g., Azure Event Hubs) work with the same Kafka Connect S3 sink connectors described in the Apache Kafka guide. Platforms with no native S3 output (e.g., Google Pub/Sub) can bridge to S3 via a lightweight forwarder like Vector or Redpanda Connect.
Step 1: Create the Collect Buffer Bucket
Create a dedicated S3 bucket for the collect buffer (e.g., my-company-scanner-collect-buffer), and apply a lifecycle policy that expires objects after 7 days:
Then link the bucket to Scanner by granting the Scanner integration role (e.g., scnr-IntegrationRole) access to it. See Step 1: AWS Infrastructure Setup for details.
Step 2: Configure Your Stream to Deliver to the Bucket
The target file format for the collect buffer is newline-delimited JSON, compressed with gzip, which is the format Scanner Collect ingests most easily. Every platform below can produce it:
Apache Kafka (Aiven connector)
format.output.type=jsonl, format.output.envelope=false, file.compression.type=gzip
Apache Kafka (Confluent connector)
format.class=...JsonFormat, s3.compression.type=gzip
AWS Kinesis / AWS MSK (Firehose)
Enable New line delimiter, set compression to GZIP
Confluent Cloud
Output format JSON, compression gzip
Cribl Stream
Data format JSON and compression gzip (both defaults)
Redpanda Connect
archive: lines + compress: gzip processors
See the platform guides above for step-by-step instructions.
A few cross-cutting things to know:
Delivery is at-least-once on most platforms, so duplicate events are possible during retries. This is normal for stream-to-S3 delivery.
Object names contain random suffixes on many platforms (e.g., Firehose, Cribl). This is fine. Scanner discovers new files via
s3:ObjectCreatednotifications, not fixed file names.Avoid double compression. If your stream's records are already gzipped, don't enable compression again in the sink, or Scanner will be unable to read the files.
Flush and rotation settings determine latency. Data typically lands in S3 within 1–15 minutes of being produced, depending on your sink's buffer size and flush interval settings.
Step 3: Ingest via Scanner Collect
Follow the Create an Index Rule guide to create an Index Rule for the collect buffer bucket, using File Type JsonLines and Compression Gzip.
Last updated
Was this helpful?