Releases: dpkp/kafka-python
1.0.0
This release includes significant code changes. Users of older kafka-python versions are encouraged to test upgrades before deploying to production as some interfaces and configuration options have changed.
Users of SimpleConsumer / SimpleProducer / SimpleClient (formerly KafkaClient) from prior releases should migrate to KafkaConsumer / KafkaProducer. Low-level APIs (Simple*) are no longer being actively maintained and will be removed in a future release.
For comprehensive API documentation, please see python help() / docstrings, kafka-python.readthedocs.org, or run tox -e docs from source to build documentation locally.
Consumers
- KafkaConsumer re-written to emulate the new 0.9 kafka consumer (java client) and support coordinated consumer groups (feature requires >= 0.9.0.0 brokers)
- Methods no longer available:
- configure [initialize a new consumer instead]
- set_topic_partitions [use subscribe() or assign()]
- fetch_messages [use poll() or iterator interface]
- get_partition_offsets
- offsets [use committed(partition)]
- task_done [handled internally by auto-commit; or commit offsets manually]
- Configuration changes (consistent with updated java client):
- lots of new configuration parameters -- see docs for details
- auto_offset_reset: previously values were 'smallest' or 'largest', now values are 'earliest' or 'latest'
- fetch_wait_max_ms is now fetch_max_wait_ms
- max_partition_fetch_bytes is now max_partition_fetch_bytes
- deserializer_class is now value_deserializer and key_deserializer
- auto_commit_enable is now enable_auto_commit
- auto_commit_interval_messages was removed
- socket_timeout_ms was removed
- refresh_leader_backoff_ms was removed
- Methods no longer available:
- SimpleConsumer and MultiProcessConsumer are now deprecated and will be removed in a future release. Users are encouraged to migrate to KafkaConsumer.
Producers
- new producer class: KafkaProducer. Exposes the same interface as official java client. Async by default; returned future.get() can be called for synchronous blocking
- SimpleProducer is now deprecated and will be removed in a future release. Users are encouraged to migrate to KafkaProducer.
Clients
- synchronous KafkaClient renamed to SimpleClient. For backwards compatibility, you will get a SimpleClient via from kafka import KafkaClient. This will change in a future release.
- All client calls use non-blocking IO under the hood.
- Add probe method check_version() to infer broker versions.
Documentation
- Updated README and sphinx documentation to address new classes.
- Docstring improvements to make python help() easier to use.
Internals
- Old protocol stack is deprecated. It has been moved to kafka.protocol.legacy and may be removed in a future release.
- Protocol layer re-written using Type classes, Schemas and Structs (modeled on the java client).
- Add support for LZ4 compression (including broken framing header checksum).
0.9.5
Consumers
- Initial support for consumer coordinator: offsets only (toddpalino PR 420)
- Allow blocking until some messages are received in SimpleConsumer (saaros PR 457)
- Support subclass config changes in KafkaConsumer (zackdever PR 446)
- Support retry semantics in MultiProcessConsumer (barricadeio PR 456)
- Support partition_info in MultiProcessConsumer (scrapinghub PR 418)
- Enable seek() to an absolute offset in SimpleConsumer (haosdent PR 412)
- Add KafkaConsumer.close() (ucarion PR 426)
Producers
- Catch client.reinit() exceptions in async producer (dpkp)
- Producer.stop() now blocks until async thread completes (dpkp PR 485)
- Catch errors during load_metadata_for_topics in async producer (bschopman PR 467)
- Add compression-level support for codecs that support it (trbs PR 454)
- Fix translation of Java murmur2 code, fix byte encoding for Python 3 (chrischamberlin PR 439)
- Only call stop() on not-stopped producer objects (docker-hub PR 435)
- Allow null payload for deletion feature (scrapinghub PR 409)
Clients
- Use non-blocking io for broker aware requests (ecanzonieri PR 473)
- Use debug logging level for metadata request (ecanzonieri PR 415)
- Catch KafkaUnavailableError in _send_broker_aware_request (mutability PR 436)
- Lower logging level on replica not available and commit (ecanzonieri PR 415)
Documentation
- Update docs and links wrt maintainer change (mumrah -> dpkp)
Internals
- Add py35 to tox testing
- Update travis config to use container infrastructure
- Add 0.8.2.2 and 0.9.0.0 resources for integration tests; update default official releases
- new pylint disables for pylint 1.5.1 (zackdever PR 481)
- Fix python3 / python2 comments re queue/Queue (dpkp)
- Add Murmur2Partitioner to kafka all imports (dpkp Issue 471)
- Include LICENSE in PyPI sdist (koobs PR 441)
0.9.4
Consumers
- Refactor SimpleConsumer internal fetch handling (dpkp #399)
- Handle exceptions in SimpleConsumer commit() and reset_partition_offset() (dpkp #404)
- Improve FailedPayloadsError handling in KafkaConsumer (dpkp #398)
- KafkaConsumer: avoid raising KeyError in task_done (dpkp #389)
- MultiProcessConsumer -- support configured partitions list (dpkp #380)
- Fix SimpleConsumer leadership change handling (dpkp #393)
- Fix SimpleConsumer connection error handling (reAsOn2010 #392)
- Improve Consumer handling of 'falsy' partition values (wting #342)
- Fix _offsets call error in KafkaConsumer (hellais #376)
- Fix str/bytes bug in KafkaConsumer (dpkp #365)
- Register atexit handlers for consumer and producer thread/multiprocess cleanup (dpkp #360)
- Always fetch commit offsets in base consumer unless group is None (dpkp #356)
- Stop consumer threads on delete (dpkp #357)
- Deprecate metadata_broker_list in favor of bootstrap_servers in KafkaConsumer (dpkp #340)
- Support pass-through parameters in multiprocess consumer (scrapinghub #336)
- Enable offset commit on SimpleConsumer.seek (ecanzonieri #350)
- Improve multiprocess consumer partition distribution (scrapinghub #335)
- Ignore messages with offset less than requested (wkiser #328)
- Handle OffsetOutOfRange in SimpleConsumer (ecanzonieri #296)
Producers
- Add Murmur2Partitioner (dpkp #378)
- Log error types in SimpleProducer and SimpleConsumer (dpkp #405)
- SimpleProducer support configuration of fail_on_error (dpkp #396)
- Deprecate KeyedProducer.send() (dpkp #379)
- Further improvements to async producer code (dpkp #388)
- Add more configuration parameters for async producer (dpkp)
- Deprecate SimpleProducer batch_send=True in favor of async (dpkp)
- Improve async producer error handling and retry logic (vshlapakov #331)
- Support message keys in async producer (vshlapakov #329)
- Use threading instead of multiprocessing for Async Producer (vshlapakov #330)
- Stop threads on
__del__
(chmduquesne #324) - Fix leadership failover handling in KeyedProducer (dpkp #314)
KafkaClient
- Add .topics property for list of known topics (dpkp)
- Fix request / response order guarantee bug in KafkaClient (dpkp #403)
- Improve KafkaClient handling of connection failures in _get_conn (dpkp)
- Client clears local metadata cache before updating from server (dpkp #367)
- KafkaClient should return a response or error for each request - enable better retry handling (dpkp #366)
- Improve str/bytes conversion in KafkaClient and KafkaConsumer (dpkp #332)
- Always return sorted partition ids in client.get_partition_ids_for_topic() (dpkp #315)
Documentation
- Cleanup Usage Documentation
- Improve KafkaConsumer documentation (dpkp #341)
- Update consumer documentation (sontek #317)
- Add doc configuration for tox (sontek #316)
- Switch to .rst doc format (sontek #321)
- Fixup google groups link in README (sontek #320)
- Automate documentation at kafka-python.readthedocs.org
Internals
- Switch integration testing from 0.8.2.0 to 0.8.2.1 (dpkp #402)
- Fix most flaky tests, improve debug logging, improve fixture handling (dpkp)
- General style cleanups (dpkp #394)
- Raise error on duplicate topic-partition payloads in protocol grouping (dpkp)
- Use module-level loggers instead of simply 'kafka' (dpkp)
- Remove pkg_resources check for
__version__
at runtime (dpkp #387) - Make external API consistently support python3 strings for topic (kecaps #361)
- Fix correlation id overflow (dpkp #355)
- Cleanup kafka/common structs (dpkp #338)
- Use context managers in gzip_encode / gzip_decode (dpkp #337)
- Save failed request as FailedPayloadsError attribute (jobevers #302)
- Remove unused kafka.queue (mumrah)
0.9.3
- Add coveralls.io support (sontek PR 307)
- Fix python2.6 threading.Event bug in ReentrantTimer (dpkp PR 312)
- Add kafka 0.8.2.0 to travis integration tests (dpkp PR 310)
- Auto-convert topics to utf-8 bytes in Producer (sontek PR 306)
- Fix reference cycle between SimpleConsumer and ReentrantTimer (zhaopengzp PR 309)
- Add Sphinx API docs (wedaly PR 282)
- Handle additional error cases exposed by 0.8.2.0 kafka server (dpkp PR 295)
- Refactor error class management (alexcb PR 289)
- Expose KafkaConsumer in all for easy imports (Dinoshauer PR 286)
- SimpleProducer starts on random partition by default (alexcb PR 288)
- Add keys to compressed messages (meandthewallaby PR 281)
- Add new high-level KafkaConsumer class based on java client api (dpkp PR 234)
- Add KeyedProducer.send_messages api (pubnub PR 277)
- Fix consumer pending() method (jettify PR 276)
- Update low-level demo in README (sunisdown PR 274)
- Include key in KeyedProducer messages (se7entyse7en PR 268)
- Fix SimpleConsumer timeout behavior in get_messages (dpkp PR 238)
- Fix error in consumer.py test against max_buffer_size (rthille/wizzat PR 225/242)
- Improve string concat performance on pypy / py3 (dpkp PR 233)
- Reorg directory layout for consumer/producer/partitioners (dpkp/wizzat PR 232/243)
- Add OffsetCommitContext (locationlabs PR 217)
- Metadata Refactor (dpkp PR 223)
- Add Python 3 support (brutasse/wizzat - PR 227)
- Minor cleanups - imports / README / PyPI classifiers (dpkp - PR 221)
- Fix socket test (dpkp - PR 222)
- Fix exception catching bug in test_failover_integration (zever - PR 216)
0.9.2
- Warn users that async producer does not reliably handle failures (dpkp - PR 213)
- Fix spurious ConsumerFetchSizeTooSmall error in consumer (DataDog - PR 136)
- Use PyLint for static error checking (dpkp - PR 208)
- Strictly enforce str message type in producer.send_messages (dpkp - PR 211)
- Add test timers via nose-timer plugin; list 10 slowest timings by default (dpkp)
- Move fetching last known offset logic to a stand alone function (zever - PR 177)
- Improve KafkaConnection and add more tests (dpkp - PR 196)
- Raise TypeError if necessary when encoding strings (mdaniel - PR 204)
- Use Travis-CI to publish tagged releases to pypi (tkuhlman / mumrah)
- Use official binary tarballs for integration tests and parallelize travis tests (dpkp - PR 193)
- Improve new-topic creation handling (wizzat - PR 174)
0.9.1
- Add codec parameter to Producers to enable compression (patricklucas - #166)
- Support IPv6 hosts and network (snaury - #169)
- Remove dependency on distribute (patricklucas - #163)
- Fix connection error timeout and improve tests (wizzat - #158)
- SimpleProducer randomization of initial round robin ordering (alexcb - #139)
- Fix connection timeout in KafkaClient and KafkaConnection (maciejkula - #161)
- Fix seek + commit behavior (wizzat - #148)
0.9.0
- Connection refactor and test fixes (wizzat - #134)
- Fix when partition has no leader (mrtheb - #109)
- Change Producer API to take topic as send argument, not as instance variable (rdiomar - #111)
- Substantial refactor and Test Fixing (rdiomar - #88)
- Fix Multiprocess Consumer on windows (mahendra - #62)
- Improve fault tolerance; add integration tests (jimjh)
- PEP8 / Flakes / Style cleanups (Vetoshkin Nikita; mrtheb - #59)
- Setup Travis CI (jimjh - #53 / #54)
- Fix import of BufferUnderflowError (jimjh - #49)
- Fix code examples in README (StevenLeRoux - #47 / #48)