The repo is versioned based on SemVer 2.0 using the tiny-but-mighty MinVer from @adamralph. See here for more information on how it works.
Please note FsKafka has (generally additive) breaking changes even in Minor and Patch releases as:
- FsKafka binds strongly to a specific version of
Confluent.Kafka+librdkafka.redist,so arbitrary replacements are already frowned on - a primary goal is to be terse and not vary from the underlying defaults where possible - putting in lots of Obsoleted overloads as one normally should is contrary to this goal
All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
The Unreleased section name is replaced by the expected version of next release. A stable version's log contains all changes between that version and the previous stable version (can duplicate the prereleases logs).
1.9.2 - 2022-08-10
1.9.0 - 2022-06-18
- Target
Confluent.Kafka [1.9.0],librdkafka.redist [1.9.0]#91 - Update global.json to use SDK version
6.0.300, useDotNet.ReproducibleBuilds#90 #93
- Fix CI to stop emitting builds with incorrect
AssemblyVersion 1.0.0.0(updated MinVer to2.5.0) #90 - Remove extraneous variation from
AwaitTaskCorrectby switching to canonical implementation #92
1.7.0 - 2021-09-20
- Target
Confluent.Kafka [1.7.0],librdkafka.redist [1.7.0]#89
- Remove FsKafka0, the older, less loved shimmed version which now be subject to the scream test with #87
- Remove targeting for
net461- support onlynetstandard 2.0with #88 - Remove
AwaitThresholdinInFlightMessageCounter#89
1.6.3 - 2021-06-23
- Added overload of
BatchedProducerto support message headers #86 🙏 @deviousasti - Added overload of
BatchedProducerto support passing inMessage[]#86 🙏 @deviousasti
- xmldocs for
BatchedProducer#86 🙏 @deviousasti
1.6.2 - 2021-02-26
- Added overload of
InFlightMessageCounter.AwaitThresholdwithbusyWorkargument #73 BatchedConsumer: AddedAwaitWithStopOnCancellation#83ProducerConfig: AddmaxMessageBytesparameter to constructor #84
- Target
Confluent.Kafka [1.6.2],librdkafka.redist [1.6.1]#85 BatchedConsumer: RenamedAwaitCompletiontoAwaitShutdown#83
- Removed deprecated overload of
KafkaProducerConfig.Createintroduced in 1.5.0 #73 - Removed deprecated overload of
InFlightMessageCounter.AwaitThresholdintroduced in 1.5.1 #73
1.5.6 - 2020-12-11
1.5.5 - 2020-10-21
1.5.4 - 2020-09-11
- Resolved Memory leak introduced in 1.5.3 #79 🙏 @wantastic84
1.5.3 - 2020-09-08
- Logging of consume-loop terminating exceptions caught in the batch processing loop and/or handler #78 🙏 @wantastic84
1.5.2 - 2020-08-19
- BREAKING: Renamed
FsKafka.KafkaMonitor.StartAsChildtoStart, changed return type toIDisposable#77 🙏 @wantastic84
- Provided mechanism to tear down the monitoring loop when the consumer stops #77 🙏 @wantastic84
1.5.1 - 2020-08-04
- BREAKING:
KafkaConsumerConfig.Create: addedallowAutoCreateTopicsargument to enable control ofallow.auto.create.topicsnow thatlibrdkafka 1.5changes the default #71
- Changed unit of
maxInFlightByteswhen rendered in logs from GiB to MiB #72
- Applied
Pause/Resumewhen consumer quiesces due tomaxInFlightBytesto avoidMAXPOLLcondition (not implemented forFsKafka0) #70
1.5.0 - 2020-07-22
1.4.5 - 2020-07-22
- BREAKING: Encapsulated linger/batching semantics in a
BatchingDU passed toKafkaProducerConfig.Create(instead oflingerandmaxInFlight) in lieu of havingBatchedProducer.CreateWithConfigOverridespatch the values #68
- BREAKING: Handle deadlock between
maxInFlightMessageByteswait loop and Consumer cancellation #61 🙏 @bilaldurrani FsKafka0: AlignedThread.Sleepwhen overmaxInFlightBytesthreshold withFsKafka(reduced from5to1ms) #67
1.4.4 - 2020-06-29
- Add
.Verboselog for handler invocations #57 🙏 @wantastic84 - include
partitionproperty asLogContext.PushPropertywhen dispatching a handler invocation #60 FsKafka0: Add ConsumerError logging #57 🙏 @svairagade
FsKafka: Distinguish Fatal Errors from by non-fatal by reducing level to Warning #57 🙏 @svairagade- Target
Confluent.Kafka [1.4.4],librdkafka.redist [1.4.4]
- Remove incorrect Producer logging (it logs before the wait hence generally reports 0), as spotted by @wantastic84 #57
FsKafka0: removeObjectDisposedExceptionwhen doing > 1 of.Stopor.Disposeon a Consumer #60FsKafka0: remove leak due to incorrect tail-recursion (do!->return!) (Clone ofFsKafka#39) #59
1.4.4-rc3 - 2020-06-25
- include
partitionproperty asLogContext.PushPropertywhen dispatching a handler invocation #60
- Target
Confluent.Kafka [1.4.4-RC1],librdkafka.redist [1.4.4] - Elevated
.Verboselog for handler invocations from #57 to.Debug#60
FsKafka0: removeObjectDisposedExceptionwhen doing > 1 of.Stopor.Disposeon a Consumer #60
1.4.4-rc2 - 2020-06-11
1.4.4-rc1 - 2020-06-10
- Add
.Verboselog for handler invocations #57 🙏 @wantastic84 - FsKafka0: Add ConsumerError logging #57 🙏 @svairagade
- FsKafka: Distinguish Fatal Errors from by non-fatal by reducing level to Warning #57 🙏 @svairagade
- Remove incorrect Producer logging (it logs before the wait hence generally reports 0), as spotted by @wantastic84 #57
1.4.3 - 2020-05-20
FsKafka0: AddIConsumer,ConsumeResult,DeliveryReport,DeliveryResultaliases #55- Add
Binding.offsetValue#56
- Target
Confluent.Kafka [1.4.3],librdkafka.redist [1.4.2] FsKafka0: RenameConfluent.Kafka.ConfigtoConfigHelpersto avoid conflict #54FsKafka0: RenameConfluent.Kafka.Types.*toConfluent.Kafka.*for symmetry #54
FsKafka0: ReplaceAutoOffsetReset.NonewithAutoOffsetReset.Error#54
1.4.2 - 2020-05-13
FsKafka0: (Moved from Propulsion.Kafka0) - Implementation of same API as FsKafka based onConfluent.Kafkav0.11.3#51KafkaMonitorbased on Burrow (Moved from Propulsion.Kafka jet/Propulsion #12 #51 🙏 @jgardellaKafkaProducerConfig.Create:requestTimeoutMs#52
- Target
Confluent.Kafka/librdkafka.redistv[1.4.2]#53 KafkaConsumerConfig.Create: MadeautoOffsetResetargument mandatory #52
Config.validateBrokerUri#51
1.4.1 - 2020-04-18
- Added optional
headersparam:KafkaProducer.ProduceAsync(key, value, ?headers)#50 - Exposed lower level
KafkaProducer.ProduceAsync(Message<string,string>)#50
1.4.0 - 2020-04-06
- BREAKING: Replace
broker : UriwithbootstrapServers : string(use(Config.validateBrokerUri broker)for backcompat if required) #49 - Target
Microsoft.NETFramework.ReferenceAssembliesv1.0.0,Minverv2.2.0 - Updated to
Confluent.Kafka,librdkafka.redistv1.4.0 - Updated to SDK
3.1.101, VM imagemacOS-latest
1.3.0 - 2019-12-04
- Renamed to
FsKafka - Updated to
MinVerv2.0.0,Microsoft.SourceLink.GitHubv1.0.0 - Updated to
Confluent.Kafka,librdkafka.redistv1.3.0
1.2.0 - 2019-09-21
NOTE: not interoperable (i.e., via a binding redirect) with CK 1.1 due to a breaking change in the CK 1.2 release, see #44.
configargument toKafaConsumerConfigandKafkaProducerConfigconstructors accepting anIDictionary<string,string>to match Confluent.Kafka 1.2 ctor overloads #44
offsetCommitIntervalrenamed toautoCommitIntervalto match name used in CK >= 1.0 #45- Uses
MinVerv2.0.0-alpha.2internally - Targets
Confluent.Kafkav1.2.0,librdkafka.redistv1.2.0#44
1.1.0 - 2019-06-28
- Targets
Confluent.Kafkav1.1.0,librdkafka.redistv1.1.0#42 - Added
Producing...prefix to log messages for consistency - Made
Consuming...prefixes for log messages consistent - Tidied logging of
Unsetvalues inConsuming... Committedmesssage ConsumerBuilder.WithLoggingsignature change (NB breaking vs1.0.1, affects users of Propulsion libraries only)
- Fixed and clarified defaulting behavior for
fetchMaxBytes,maxInFlight,partitionerarguments #40
1.0.1 - 2019-06-10
Propulsion.* - these have been moved to a dedicated repo:- https://github.com/jet/propulsion
- remove leak due to incorrect tail-recursion (
do!->return!) #39
1.0.1-rc1 - 2019-06-03
Propulsion.Kafka.Codec.RenderedSpan(neeEquinox.Projection.Codec.RenderedSpan, which is deprecated and is being removed)Propulsion.EventStore,Propulsion.Cosmos(productized fromEquinox.Templates'seqxsyncandeqxprojector)
- Targets
Confluent.Kafkav1.0.1,librdkafka.redistv1.0.1
1.0.0-rc14 - 2019-06-10
- remove leak due to incorrect tail-recursion (
do!->return!) (Cherry pick of #39)
1.0.0-rc13 - 2019-06-01
- Split reusable components of
ParallelConsumerout into independentPropulsionandPropulsion.Kafkalibraries #34
1.0.0-rc12 - 2019-05-31
- Included
totalLagin Consumer Stats
- Default
minInFlightBytesis now 2/3 ofmaxInFlightBytes - Reduced
Thread.Sleepwhen overmaxInFlightBytesthreshold from5to1ms
- Significant tuning / throughput improvements for
ParallelConsumer
1.0.0-rc11 - 2019-05-27
ParallelConsumer#33
- reinstated
AutoOffsetResetlogging inKafkaConsumerConfig
1.0.0-rc10 - 2019-05-22
- split batching behaviors out into
BatchedProducer/BatchedConsumer#30 - default auto-commit interval dropped from 10s to 5s (which is the
Confluent.Kafkadefault) #30 - removed curried
memberMethod arguments inStartmethods
1.0.0-rc9 - 2019-05-22
- each configuration DSL now has a
customizefunction to admit post-processing after defaults andcustomhave taken effect #29 - Producer/Consumer both have an
Innerto enable custom logic #29
- default auto-commit interval dropped from 10s to 5s (which is the
Confluent.Kafkadefault) #29 - default
fetchMinBytesdropped from 10 to 1 (which is theConfluent.Kafkadefault) #29
1.0.0-rc8 - 2019-05-21
1.0.0-rc7 - 2019-05-16
- Exposed [single-item]
ProduceAsyncinKafkaProducer
1.0.0-rc6 - 2019-04-24
- Updated to target
Confluent.Kafka 1.0.0
1.0.0-rc5 - 2019-04-24
- Updated to target
Confluent.Kafka 1.0.0-RC7
1.0.0-rc4 - 2019-04-23
- Updated to target
Confluent.Kafka 1.0.0-RC6
1.0.0-rc3 - 2019-04-12
- Updated to target
Confluent.Kafka 1.0.0-RC4
- Cleaned minor logging inconsistency wrt
CompressionType
1.0.0-rc2 - 2019-04-02
- Updated to target
Confluent.Kafka 1.0.0-RC3#24
1.0.0-rc1 - 2019-03-27
- Updated to target
Confluent.Kafka 1.0.0-RC2(which referenceslibrdkafka.redist 1.0.0) #23 - Pins
rdkafkaandConfluent.Kafkadependencies to specific known good versions as above #22
1.0.0-preview2 - 2019-03-26
- Updated to target
Confluent.Kafka 1.0.0-RC1(triggered relatively minor changes internally due to sane API fixes, does not update to rdkafka 1.0.0, still1.0.0-RC9) #21
1.0.0-preview1 - 2019-03-05
(Extracted from Equinox Changelog - this codebase was maintained within that repo originally)
Equinox.Projection.Kafkaconsumer metrics emission, see Equinox #94 @michaelliao5- Initial release as part of
Equinox.Cosmosprojection facilities, see Equinox #87 @michaelliao5
(Stripped down repo for history purposes, see v0 branch for implementation targeting Confluent.Kafka v 0.9.4)