All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Manually commit uncommitted offsets before closing the Kafka Consumer
- StatsD client
- kafka.Streams
- Internal interface changes for reliablity
- Improved test cases
- Smaller API surface area
- Streams struct is replaced by kafka.MessageConsumer
- Streams interface is replaced by MessageConsumer interface
- StatsD package has been removed
- Go 1.22 is the min version required
- ziggurat.RunAll has been removed
- ziggurat.StartFunc and StopFunc have been removed
- ziggurat.Event struct has been cleaned up
- ziggurat.Handler does not return an error anymore
- Upgrades Confluent Kafka client to
v2.2.0
- Fixes RabbitMQ connection URL bug
- Update Update github.com/confluentinc/confluent-kafka-go to v1.9.2
- Update github.com/confluentinc/confluent-kafka-go to v1.9.1
- Built-in support for Mac OSX M1 / arm64.
- Fixes goroutine publisher loop in statsd
- Fixes goroutine leak in statsd publisher
- Uses RabbitMQ publisher pooling for publish operations. This significantly improves the publish throughput
- The function
rabbitmq.GetRetryCount
is now exposed and can be used to get the retry count without having to do manual assertions
- changes internal retry structure for RabbitMQ
- The RabbitMQ
QueueConfig
now usesQueueKey
instead ofQueueName
- consumer config now takes in a new option called
PartititionAssignment
which is used to configure how kafka partitions are assigned to a consumer
- Kafka consumer default
PollTimeout
is100 ms
ConsumerGroupID
is renamed toGroupID
andOriginTopics
is renamed toTopics
to keep it consistent with kafka terminology- The run loop for kafka consumer polling has been restructured.
- The server package only exposes a Run method which orchestrates an HTTP Server rather than providing a full web server implementation
httprouter
dependency has been removed
- Exposes the ARetry struct from RabbitMQ
- RabbitMQ MW adds a header
retry-origin:ziggurat-go
to identify the message retry source - Adds a
WithHandler
option function inside the server package to pass in custom handlers - Adds a deprecation comment for
ConfigureHandler
andConfigureHTTPEndpoints
as this is implementation specific - Internal code refactoring
- Exposes a close method on the statsd client to prevent early closes due to context cancellation
- StatsD Run method takes in an Option to configure the goroutine publish interval. a negative value will not publish goroutines
- fixes go-routine leak in the Dead set replay handler
- kafka messages now use the route group to route messages,
<route_group>/<topic>/<partition>
. Usage of<bootstrap_server>/<consumer_group>/<topic>/<partition>
is deprecated as this makes the path very long and routes become difficult to configure.
Compose
methods are removed from the router API(s)
- uses
go v1.17
- various bug fixes and panic fixes
- more descriptive errors
- RabbitMQ's consumers do not use go-routine based workers anymore
- uses go embed to embed templates to render
- RabbitMQ WorkerCount is removed from QueueConfig
- Uses sync.Once to initialize publishers in the Wrap method
- integration tests for kafka streams and RabbitMQ
ziggurat.Use
API to compose middleware- all packages use the
logger.Noop
as the default implementation for logging rabbitmq.WithConnectionTimeout
to specify a timeout for queue creation- Parallelize RabbitMQ consumption using the
ConsumerCount
- adds a rabbitmq dead set replay handler
- fixes RabbitMQ panic
- RabbitMQ middleware for auto retrying messages
- A human friendly logger
- Event now includes a metadata map of type
map[string]interface{}
- kafka key values are copied to a new slice before passing it on
- statsD middleware no longer sends the
route
label - loggers use the
logger.DiscardLogger
as the default logger
- Adds headers to maintain backwards compatibility
- Regex based kafka router
- Moves PipeHandlers to util pkg
- Makes Prometheus server port configurable
- Fixes Prometheus server port
- An error for streams clean shutdown
- fixes parent context propagation in the
ziggurat.RunAll
method
- retract v1.0.8 due to tagging in pipelines
- fixes statsD middleware handler metrics publish unit
- statsD middleware now publishes a generic event delay
- statsD middleware only publishes kafka lag and not all events lag
- fixes handler execution calculation in the statsD middleware
- Handler signature now uses the
*Event
as the second arg - Includes a
RunAll
method to run multiple streams - The Run methods returns an error and blocks, leaving concurrency to the caller
- Kafka polling uses the
Poll
method instead of thereadMessage
method
- statsD middleware
- Prometheus middleware
- logging middleware
- an error for processing failed
- streams kafka logs using channels
- removes rabbitmq middleware
- removes statsd middleware
- handler interface is expected to return an error
- changes the handler signature
- moves http-server to a new package
- renames the command from
zig
toziggurat
- interface for structured logging
- streamer interface
- event interface
- consumers process messages concurrently
- Smaller app API
- Middleware composition
- Refines interface methods
- fixes tests
- support for rabbitmq clusters
- a safer amqp implementation which eliminates the race conditions while re-connecting
- improves test coverage
- reorganised packages
- provides a message decode hook on MessageEvent
- fixes templates
- updates the
kakfa-client
lib
- uses
http.Handler
to configure http-routes - updates main template
- defines an interface for App
- fixes template not found bug
- uses raw strings instead of tempalte files
- adds a sandbox to test out metric publishing,kafka production and retry flow
- fixes CLI bugs
- updates ziggurat version in the CLI
- fixes bug in CLI where
<-
was being escaped
- adds new make tasks
- CLI now generates new compose files for sandbox-ing
- renames the
MessageRetrier
interface toMessageRetry
- exports
handlerFn
in thetopicEntity
struct - removes
rabbitmq.go
- uses a thread-safe rabbitmq implementation
- runs app in async mode
- fixes CLI related issues
- Adds a zig CLI to scaffold apps
- fixes httpserver not starting up
- fixes httpserver bug which caused configured routes to be lost
- Adds a new middleware to publish message metrics
- Adds thread safety to
MessageAttributes
inMessageEvent
- Adds a metric to measure the
handlerFunc
exec time - Adds a make task to start the app
- Adds a make task to start-up the metrics containers
- Adds a make task to produce messages to kafka
- halts the app if retries are disabled, and a message is retried
- changes the
--zigurat-config
to-config
app.Run
accepts azig.RunOptions
type- fixes race conditions when starting-up the app
- uses constructors functions to initialize components
- Sends
app_name
as a tag in StatsD
RabbitRetrier
uses app context to exit the replay delivery loop- App components are not mutable
- Disables Kafka broker logs
- Add tests for app
- Add tests for middleware
- Passes all middleware args by value
- Fixes race condition in pipe handlers
- Makes stop function a part of the
app.Run
method
- Add tests for util
- Fixes middleware execution order
- Fixes log formatting
- Disables colored output for logs
- Adds function to DefaultHTTPServer to attach routes
- Adds ping endpoint to DefaultHTTPServer
- Retrier interface Start method returns a channel to wait on
- Rabbit Retrier's consumer polling is moved into Start method
- Fixes go mod module path
Initial release of Ziggurat-golang
- Kafka consumer group support
- Middleware support
- Message retries using RabbitMQ
- At least once delivery semantics
- Override config using ENV variables
- Adds HTTP server for replaying dead set messages
- Default middleware to deserialize protobuf messages and JSON messages
- Publish StatsD style counters