- Notifications
You must be signed in to change notification settings - Fork0
An opinionated Symfony bundle for a painless integration of Apache Kafka.
License
geekcell/kafka-symfony-bundle
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
An opinionated Symfony bundle for a painless integration ofApache Kafka.
- PHP 8 or higher
- php-rdkafka extension installed
- Apache Kafka broker
- ConfluentSchema Registry for Kafka
To use this bundle, require it in Composer
composer require geekcell/kafka-bundle
Inherit fromRecord
to define records you want to send to Kafka.
useGeekCell\KafkaBundle\Record;useFlixTech\AvroSerializer\Objects\Schema;class OrderDtoextends Record{publicint$id;publicint$productId;publicint$customerId;publicint$quantity;publicfloat$total;publicstring$status ='PENDING';publicfunctiongetKey(): ?string {// Nullable; if provided it will be used as message key// to preserve message ordering.returnsprintf('order_%s',$this->id); }protectedfunctionwithFields(RecordType$root):Schema {// See for examples:// https://github.com/flix-tech/avro-serde-php/tree/master/test/Objects/Schema$root ->field('id', Schema::int()) ->field('productId', Schema::int()) ->field('customerId', Schema::int()) ->field('quantity', Schema::int()) ->field('total', Schema::float()) ->field('status', Schema::enum() ->name('OrderStatusEnum') ->symbols(...['PENDING','PAID','SHIPPED','CANCELLED']) ->default('PENDING'), );return$root; }}
Create an event, which implements theEvent
contract and returns the above record assubject.
useGeekCell\KafkaBundle\Contracts\Event;class OrderPlacedEventimplements Event{publicfunction__construct(privateOrderDto$orderDto, ) { }publicfunctiongetSubject():Record {return$this->orderDto; }}
If you dispatchEvent
via the standard Symfony event dispatcher, it will be automatically be serialized into Avro format, registered, send to Kafka based on your configuration.
$this->eventDispatcher->dispatch(newOrderPlacedEvent($orderDto));
geek_cell_kafka:avro:schema_registry_url:'http://schemaregistry:8081'schemas:defaults:namespace:'com.acme.avro'events:lookup:# Look up events in the following directories -'src/Event'kafka:brokers:'broker:9091,broker:9092'global:# Global config params for librdkafka (not pre-validated)# https://github.com/confluentinc/librdkafka/blob/master/CONFIGURATION.md#global-configuration-propertiestopic:# Topic config params for librdkafka (not pre-validated)# https://github.com/confluentinc/librdkafka/blob/master/CONFIGURATION.md#topic-configuration-properties
About
An opinionated Symfony bundle for a painless integration of Apache Kafka.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.