- Tested 0.1.16-alpha01
- BUG: memory leak in 0.1.15.
-
BREAKING:
FetchResponse
item now explicit structure rather than tuple. Breaking only if using low-level Fetch API. -
BUG: consumer doesn't recover from
leaderless_partition_detected
#204 -
BUG: consumer would enter an infinite loop between
offsets_out_of_range
andresuming_fetch_from_reset_offsets
-
BUG: stalled consumers after TCP connection timeout
-
BUG: offsets committed for partitions which are no longer assigned after a rebalance
-
FEATURE:
ConsumerConfig.fetchMaxBytesOverride
allows increasingfetchMaxBytes
to a ceiling on message too big exceptions. -
FEATURE:
ProducerQueueType
to allow configuration of producer message queue networks. -
IMPROVE: support for v0.11 of broker protocol, including v5 of Fetch and v3 of Produce APIs
-
IMPROVE: logging where
received_empty_buffer
logged asINFO
message as it doesn't indicate an error -
IMPROVE: connection managemeng to ensure only a single TCP connection per broker per Kafka connection
-
IMPROVE: Reduce recovery time from broker restarts and rebalancing
-
IMPROVE: improved TCP connection logging and log levels to reduce "false positives"
-
IMPROVE: .NET Standard support
- BUG: ensure CRC check runs with respect to appropriate message version (magic byte)
- BUG: compression works when using v0.11 (auto) protocol
- IMPROVE: support for v0.11 of broker protocol, including v5 of Fetch and v3 of Produce APIs
- IMPROVE: improved TCP connection logging and log levels to reduce "false positives"
- BREAKING: FetchResponse item now explicit structure rather than tuple. Breaking only if using low-level Fetch API.
- FEATURE:
ProducerQueueType
to allow configuration of producer message queue networks. - BUG: consumer doesn't recover from
leaderless_partition_detected
#204
- BUG: consumer would enter an infinite loop between
offsets_out_of_range
andresuming_fetch_from_reset_offsets
- BUG: stalled consumers after TCP connection timeout
- BUG: offsets committed for partitions which are no longer assigned after a rebalance
- FEATURE: ConsumerConfig.fetchMaxBytesOverride allows increasing fetchMaxBytes to a ceiling on message too big exceptions.
- IMPROVE: logging where received_empty_buffer logged as INFO message as it doesn't indicate an error
- IMPROVE: connection managemeng to ensure only a single TCP connection per broker per Kafka connection
- IMPROVE: Reduce recovery time from broker restarts and rebalancing
- Adjusting FSharp.Core reference
- .NET Standard + .NET 45 targets
- Roll-up of 0.1.13-alpha builds after testing
- WARN: Default to use v0.10.1 of broker protocol.
- Print client and protocol version.
- Consumers will continue to run if not assigned partitions.
- Fixed 'Consumer.fetchOffsets' returning no offsets when Array.empty is passed in as partitions per topic
- Fixed 'Consumer.stream' function that sometimes causes starvation when AsyncSeq.mergeAll would prioritize first few tasks rather than later
- Added auto versioning support for Kafka APIs for Produce, Fetch, Offset, Metadata, OffsetCommit, OffsetFetch, GroupCoordinator, JoinGroup, Heartbeat, LeaveGroup, SyncGroup, DescribeGroups, ListGroups, ApiVersions.
- Added an INFO message printed by connection to show protocol and client versions.
- Adjusted ConsumerConfig.[fetchMaxWaitMs, fetchMinBytes] to match Kafka native client defaults.
- BufferingProducer.produceBatched
- Buffering producer experimental module.
- Added support for all versions of the OffsetFetch API in the Kafka protocol.
- BREAKING: Offset commit queue is moved to module
PeriodicCommitQueue
. See: https://jet.github.io/kafunk/consuming.html#Periodic-Offset-Commit. - Producer performance improvements.
- Fixed bug with producing using version >= 0.10.0 wherein empty key/value would be written
- Fix another scenario referenced in 0.1.9 producer batching fix.
- Fix Producer batching wherein if Producer.produceBatched was called with a batch size larger than the max, it would still send it.
- Fix producer recovery wherein a produce batch timeout may overlap with broker connection failures, resulting in retries without rediscovery.
- Fix Join/Sync group response for v10 and greater
- Cumulitive release.
- NEW: ConsumerInfo.consumerGroups returns information about all consumer groups in the cluster, including group members and the topics-partitions they are assgined.
- Producer retry without recovery when recovery not needed.
- Ensure that Resource isn't corrupted after a failed resource recovery attempt and can be retried again.
- Resource performance improvement.
- Fixed 'ConsumerProgress.progress' returning -1 for offsets when Array.empty is passed in
- Cumulitive release with fixes since 0.1.4
- Producer performance improvement
- BUG: Producer.produceBatched doesn't recover after transient failures
- BUG: race condition in consumer group join wherein multiple groups created on the same connection might prevent a group coordinator from being retrieved
- Adjust retry policy defaults: reduce retries to fail fast
- Exposed internal ConsumerGroup.decodeMemberAssignment
- Improve consumer group stability, ensuring escalation in all consumer failure modes
- AsyncSeq v2.0.14
- Change offset range argument type Consumer.streamRange
- Added
Consumer.streamRange
to read a specified range of offsets. - Added
Consumer.periodicOffsetCommitter
which can help ensuring periodic offset commits when usingConsumer.stream
. - Logging improvements: changed some ERROR messages to WARN, added group coordinator to group related logs, caught missing partition info error
- AsyncSeq v2.0.13
- Fixed
FetchResponse
MessageTooBigException
when a message set has been compressed. (#160)
- Fixed v0.10.1 protocol bug for
Offset
API. - Fixed v0.10.1 protocol bug for
JoinGroup
API. - Added
ApiVersionsRequest
. - Added support for automatically detecting API versions via
ApiVersionRequest
usingKafkaConfig.autoApiVersions
.
- Added ProducerResult.count indicating the number of messages produced in a batch for a partition.
- Fixed consumer offset commit bug wherein after a rebalance a consumer gets assigned a new partition which doesn't receive any messages for longer than the offset retention period, the offsets would be lost. This would only happen after a rebalance not after initial join.
- Snappy compression.
- Fixed lag calculation bug in ConsumerInfo module.
- Ensure recovery during broker restart (virtual broker routing).
- Add Producer.produceBatched with improved API and performance:
- Takes a batch of messages rather than a function returning a batch.
- Parallelizes requests across brokers.
- Fix message set decompression (take 3)
- Fix message set decompression (take 2)
- Fix message set decompression
- Unroll loop in producer to make more efficient
- Request buffer pool
- Added ZK offset migration script in tests project
- Support v10.0.1 for Offset API
- BREAKING:
- MessageSet tuples replaced with structs
- ProduceRequest tuples replaced with structs
- ProduceResponse tuples replaced with structs
- OffsetCommitRequest added support for v1 (in addition to v0 and v2)
- Fix use of IVar where concurrent puts are possible
- Fix #124
- Fix #126
- Fix producer bug where during recovery, messages in flight would be lost and never timeout.
- Improve produce and fetch codec performance.
- Fix possible deadlock with Async.AwaitTask usage.
- Fix CRC32 check.
- Make fetch response decoding more efficient (eliminate intermediate tuple allocations).
- Make CRC check on fetch response configurable (defaults to true).
- Ensure fetch errors are escalated to the top-level consumer.
- Fix bug in ConsumerInfo module where offset information for all partitions wouldn't be retrieved and would throw during the merge.
- Fix Async.parallel used internall for testing.
- Allow disabling of Console logger
- Ensure periodic offset committer commits offsets on start
- Improve producer batching performance
- Fix all offset commit
- Improve producer performance
- Improve producer error messaging
- Commit offsets even when unchanged to prevent loss due to retention.
- BREAKING:
- Removed ConsumerConfig.initialFetchTime, consolidated into ConsumerConfig.autoOffsetReset
- Replaced offsetOutOfRangeAction with autoOffsetReset and new union type AutoOffsetReset
- Hide internal members, including Async
- Refine fault tolerance defaults.
- Special Valentine's day edition.
- Refined flow for handling escalated failures.
- Fix error code MessageSizeTooLarge.
- Default client.id = "" rather than Guid; new Guid for connection id.
- Expose connection, producer, consumer config.
- Default producer to RequiredAcks.AllInSync
- Fix range consumer partition assignment strategy
- Adjust consumer group heartbeat defaults
- Added AsyncSeq tests
- Improve producer performance (batch size measurement)
- Producer in-memory buffer in bytes
- ConsumerInfo module for consumer progress tracking
- Updated exampled/readme
- Breaking changes:
- Consumer.stream drops bufferSize parameter
- ProducerResult contains a single partition-offset pair rather than array
- Producer buffering by size in bytes
- Fixex bug where producer errors weren't being surfaced
- Breaking changes:
- ProducerConfig buffer size settings are new
- Producer.produce takes a single message rather than array
- Consumer.consume arguments reordered
- Logging improvements (more compact, more info)
- Improved producer-consumer test
- Producer buffering
- Ensure cancellation propagated to consumer on group close
- Logging improvements
- Fix ConsumerMessageSet.lag measure
- Propagate cancellation to consumer fetch process
- Discovery brokers by DNS when appropriate
- Explicit channel failure and recovery contract
- Fix bug in assignment strategy where all available metadate were used rather than that of subscribed topic
- Pass consumer state to consume callback (BREAKING)
- Consumer group assignment strategies configurable
- Refine Fetch consumer offsets API
- Current consumer state API
- Fetch consumer offsets API
- Hide internal members
- Documentation
- Log leader-size member assignments
- Fix consumer NotCoordinatorForGroup error recovery
- Refine TCP error recovery
- v0.10.1 support
- Fix overflow bug in Partitioner.roundRobin
- Error flow monitoring
- Fix bug in Async.choose
- Consumer.commitOffsetsToTime
- Consumer doesn't fetch offsets until its starts consuming
- Auto recover producer from error code 2
- Consumer fetch request batching by broker
- Fix protocol codec issue for batched fetch responses
- Periodic offset commit
- Fix a few reconnection/fault tolerance bugs
- Adjust consumer api to allow offset strategies to be parameterized
- A more complete consumer API is now available
- We now use FSharp.Control.AsyncSeq instead of an internal version
- Adjustments have been made to connection recovery and general fault tolerance (still early)
- Improvements to message grouping should improve producer throughput
- initial