karafka 2.0.26 → 2.0.28

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Karafka framework changelog
2
2
 
3
+ ## 2.0.28 (2023-01-25)
4
+ - **[Feature]** Provide the ability to use Dead Letter Queue with Virtual Partitions.
5
+ - [Improvement] Collapse Virtual Partitions upon retryable error to a single partition. This allows dead letter queue to operate and mitigate issues arising from work virtualization. This removes uncertainties upon errors that can be retried and processed. Affects given topic partition virtualization only for multi-topic and mulit-partition parallelization. It also minimizes potential "flickering" where given data set has potentially many corrupted messages. The collapse will last until all the messages from the collective corrupted batch are processed. After that, virtualization will resume.
6
+ - [Improvement] Introduce `#collapsed?` consumer method available for consumers using Virtual Partitions.
7
+ - [Improvement] Allow for customization of DLQ dispatched message details in Pro (#1266) via the `#enhance_dlq_message` consumer method.
8
+ - [Improvement] Include `original_consumer_group` in the DLQ dispatched messages in Pro.
9
+ - [Improvement] Use Karafka `client_id` as kafka `client.id` value by default
10
+
11
+ ### Upgrade notes
12
+
13
+ If you want to continue to use `karafka` as default for kafka `client.id`, assign it manually:
14
+
15
+ ```ruby
16
+ class KarafkaApp < Karafka::App
17
+ setup do |config|
18
+ # Other settings...
19
+ config.kafka = {
20
+ 'client.id': 'karafka'
21
+ }
22
+ ```
23
+
24
+ ## 2.0.27 (2023-01-11)
25
+ - Do not lock Ruby version in Karafka in favour of `karafka-core`.
26
+ - Make sure `karafka-core` version is at least `2.0.9` to make sure we run `karafka-rdkafka`.
27
+
3
28
  ## 2.0.26 (2023-01-10)
4
29
  - **[Feature]** Allow for disabling given topics by setting `active` to false. It will exclude them from consumption but will allow to have their definitions for using admin APIs, etc.
5
30
  - [Improvement] Early terminate on `read_topic` when reaching the last offset available on the request time.
@@ -352,797 +377,8 @@ Karafka 2.0:
352
377
  - Introduces a `karafka-core` dependency that contains common code used across the ecosystem.
353
378
  - Contains updated [wiki](https://github.com/karafka/karafka/wiki) on everything I could think of.
354
379
 
355
- ### What's ahead
356
-
357
- Karafka 2.0 is just the beginning.
358
-
359
- There are several things in the plan already for 2.1 and beyond, including a web dashboard, at-rest encryption, transactions support, and more.
360
-
361
- ## 2.0.0.rc6 (2022-08-05)
362
- - Update licenser to use a gem based approach based on `karafka-license`.
363
- - Do not mark intermediate jobs as consumed when Karafka runs Enhanced Active Job with Virtual Partitions.
364
- - Improve development experience by adding fast cluster state changes refresh (#944)
365
- - Improve the license loading.
366
-
367
- ## 2.0.0.rc5 (2022-08-01)
368
- - Improve specs stability
369
- - Improve forceful shutdown
370
- - Add support for debug `TTIN` backtrace printing
371
- - Fix a case where logger listener would not intercept `warn` level
372
- - Require `rdkafka` >= `0.12`
373
- - Replace statistics decorator with the one from `karafka-core`
374
-
375
- ## 2.0.0.rc4 (2022-07-28)
376
- - Remove `dry-monitor`
377
- - Use `karafka-core`
378
- - Improve forceful shutdown resources finalization
379
- - Cache consumer client name
380
-
381
- ## 2.0.0.rc3 (2022-07-26)
382
- - Fix Pro partitioner hash function may not utilize all the threads (#907).
383
- - Improve virtual partitions messages distribution.
384
- - Add StatsD/DataDog optional monitoring listener + dashboard template.
385
- - Validate that Pro consumer is always used for Pro subscription.
386
- - Improve ActiveJob consumer shutdown behaviour.
387
- - Change default `max_wait_time` to 1 second.
388
- - Change default `max_messages` to 100 (#915).
389
- - Move logger listener polling reporting level to debug when no messages (#916).
390
- - Improve stability on aggressive rebalancing (multiple rebalances in a short period).
391
- - Improve specs stability.
392
- - Allow using `:key` and `:partition_key` for Enhanced Active Job partitioning.
393
-
394
- ## 2.0.0.rc2 (2022-07-19)
395
- - Fix `example_consumer.rb.erb` `#shutdown` and `#revoked` signatures to correct once.
396
- - Improve the install user experience (print status and created files).
397
- - Change default `max_wait_time` from 10s to 5s.
398
- - Remove direct dependency on `dry-configurable` in favour of a home-brew.
399
- - Remove direct dependency on `dry-validation` in favour of a home-brew.
400
-
401
- ## 2.0.0-rc1 (2022-07-08)
402
- - Extract consumption partitioner out of listener inline code.
403
- - Introduce virtual partitioner concept for parallel processing of data from a single topic partition.
404
- - Improve stability when there kafka internal errors occur while polling.
405
- - Fix a case where we would resume a LRJ partition upon rebalance where we would reclaim the partition while job was still running.
406
- - Do not revoke pauses for lost partitions. This will allow to un-pause reclaimed partitions when LRJ jobs are done.
407
- - Fail integrations by default (unless configured otherwise) if any errors occur during Karafka server execution.
408
-
409
- ## 2.0.0-beta5 (2022-07-05)
410
- - Always resume processing of a revoked partition upon assignment.
411
- - Improve specs stability.
412
- - Fix a case where revocation job would be executed on partition for which we never did any work.
413
- - Introduce a jobs group coordinator for easier jobs management.
414
- - Improve stability of resuming paused partitions that were revoked and re-assigned.
415
- - Optimize reaction time on partition ownership changes.
416
- - Fix a bug where despite setting long max wait time, we would return messages prior to it while not reaching the desired max messages count.
417
- - Add more integration specs related to polling limits.
418
- - Remove auto-detection of re-assigned partitions upon rebalance as for too fast rebalances it could not be accurate enough. It would also mess up in case of rebalances that would happen right after a `#seek` was issued for a partition.
419
- - Optimize the removal of pre-buffered lost partitions data.
420
- - Always run `#revoked` when rebalance with revocation happens.
421
- - Evict executors upon rebalance, to prevent race-conditions.
422
- - Align topics names for integration specs.
423
-
424
- ## 2.0.0-beta4 (2022-06-20)
425
- - Rename job internal api methods from `#prepare` to `#before_call` and from `#teardown` to `#after_call` to abstract away jobs execution from any type of executors and consumers logic
426
- - Remove ability of running `before_consume` and `after_consume` completely. Those should be for internal usage only.
427
- - Reorganize how Pro consumer and Pro AJ consumers inherit.
428
- - Require WaterDrop `2.3.1`.
429
- - Add more integration specs for rebalancing and max poll exceeded.
430
- - Move `revoked?` state from PRO to regular Karafka.
431
- - Use return value of `mark_as_consumed!` and `mark_as_consumed` as indicator of partition ownership + use it to switch the ownership state.
432
- - Do not remove rebalance manager upon client reset and recovery. This will allow us to keep the notion of lost partitions, so we can run revocation jobs for blocking jobs that exceeded the max poll interval.
433
- - Run revocation jobs upon reaching max poll interval for blocking jobs.
434
- - Early exit `poll` operation upon partition lost or max poll exceeded event.
435
- - Always reset consumer instances on timeout exceeded.
436
- - Wait for Kafka to create all the needed topics before running specs in CI.
437
-
438
- ## 2.0.0-beta3 (2022-06-14)
439
- - Jobs building responsibility extracted out of the listener code base.
440
- - Fix a case where specs supervisor would try to kill no longer running process (#868)
441
- - Fix an instable integration spec that could misbehave under load
442
- - Commit offsets prior to pausing partitions to ensure that the latest offset is always committed
443
- - Fix a case where consecutive CTRL+C (non-stop) would case an exception during forced shutdown
444
- - Add missing `consumer.prepared.error` into `LoggerListener`
445
- - Delegate partition resuming from the consumers to listeners threads.
446
- - Add support for Long-Running Jobs (LRJ) for ActiveJob [PRO]
447
- - Add support for Long-Running Jobs for consumers [PRO]
448
- - Allow `active_job_topic` to accept a block for extra topic related settings
449
- - Remove no longer needed logger threads
450
- - Auto-adapt number of processes for integration specs based on the number of CPUs
451
- - Introduce an integration spec runner that prints everything to stdout (better for development)
452
- - Introduce extra integration specs for various ActiveJob usage scenarios
453
- - Rename consumer method `#prepared` to `#prepare` to reflect better its use-case
454
- - For test and dev raise an error when expired license key is used (never for non dev)
455
- - Add worker related monitor events (`worker.process` and `worker.processed`)
456
- - Update `LoggerListener` to include more useful information about processing and polling messages
457
-
458
- ## 2.0.0-beta2 (2022-06-07)
459
- - Abstract away notion of topics groups (until now it was just an array)
460
- - Optimize how jobs queue is closed. Since we enqueue jobs only from the listeners, we can safely close jobs queue once listeners are done. By extracting this responsibility from listeners, we remove corner cases and race conditions. Note here: for non-blocking jobs we do wait for them to finish while running the `poll`. This ensures, that for async jobs that are long-living, we do not reach `max.poll.interval`.
461
- - `Shutdown` jobs are executed in workers to align all the jobs behaviours.
462
- - `Shutdown` jobs are always blocking.
463
- - Notion of `ListenersBatch` was introduced similar to `WorkersBatch` to abstract this concept.
464
- - Change default `shutdown_timeout` to be more than `max_wait_time` not to cause forced shutdown when no messages are being received from Kafka.
465
- - Abstract away scheduling of revocation and shutdown jobs for both default and pro schedulers
466
- - Introduce a second (internal) messages buffer to distinguish between raw messages buffer and karafka messages buffer
467
- - Move messages and their metadata remap process to the listener thread to allow for their inline usage
468
- - Change how we wait in the shutdown phase, so shutdown jobs can still use Kafka connection even if they run for a longer period of time. This will prevent us from being kicked out from the group early.
469
- - Introduce validation that ensures, that `shutdown_timeout` is more than `max_wait_time`. This will prevent users from ending up with a config that could lead to frequent forceful shutdowns.
470
-
471
- ## 2.0.0-beta1 (2022-05-22)
472
- - Update the jobs queue blocking engine and allow for non-blocking jobs execution
473
- - Provide `#prepared` hook that always runs before the fetching loop is unblocked
474
- - [Pro] Introduce performance tracker for scheduling optimizer
475
- - Provide ability to pause (`#pause`) and resume (`#resume`) given partitions from the consumers
476
- - Small integration specs refactoring + specs for pausing scenarios
477
-
478
- ## 2.0.0-alpha6 (2022-04-17)
479
- - Fix a bug, where upon missing boot file and Rails, railtie would fail with a generic exception (#818)
480
- - Fix an issue with parallel pristine specs colliding with each other during `bundle install` (#820)
481
- - Replace `consumer.consume` with `consumer.consumed` event to match the behaviour
482
- - Make sure, that offset committing happens before the `consumer.consumed` event is propagated
483
- - Fix for failing when not installed (just a dependency) (#817)
484
- - Evict messages from partitions that were lost upon rebalancing (#825)
485
- - Do **not** run `#revoked` on partitions that were lost and assigned back upon rebalancing (#825)
486
- - Remove potential duplicated that could occur upon rebalance with re-assigned partitions (#825)
487
- - Optimize integration test suite additional consumers shutdown process (#828)
488
- - Optimize messages eviction and duplicates removal on poll stopped due to lack of messages
489
- - Add static group membership integration spec
490
-
491
- ## 2.0.0-alpha5 (2022-04-03)
492
- - Rename StdoutListener to LoggerListener (#811)
493
-
494
- ## 2.0.0-alpha4 (2022-03-20)
495
- - Rails support without ActiveJob queue adapter usage (#805)
496
-
497
- ## 2.0.0-alpha3 (2022-03-16)
498
- - Restore 'app.initialized' state and add notification on it
499
- - Fix the installation flow for Rails and add integration tests for this scenario
500
- - Add more integration tests covering some edge cases
501
-
502
- ## 2.0.0-alpha2 (2022-02-19)
503
- - Require `kafka` keys to be symbols
504
- - [Pro] Added ActiveJob Pro adapter
505
- - Small updates to the license and docs
506
-
507
- ## 2.0.0-alpha1 (2022-01-30)
508
- - Change license to `LGPL-3.0`
509
- - [Pro] Introduce a Pro subscription
510
- - Switch from `ruby-kafka` to `librdkafka` as an underlying driver
511
- - Introduce fully automatic integration tests that go through the whole server lifecycle
512
- - Integrate WaterDrop tightly with autoconfiguration inheritance and an option to redefine it
513
- - Multi-threaded support for concurrent jobs consumption (when in separate topics and/or partitions)
514
- - Introduce subscriptions groups concept for better resources management
515
- - Remove completely all the callbacks in favour of finalizer method `#on_shutdown`
516
- - Provide `on_revoked` method for taking actions upon topic revoke
517
- - Remove single message consumption mode in favour of documentation on how to do it easily by yourself
518
- - Provide sync and async offset management with async preferred
519
- - Introduce seamless Ruby on Rails integration via `Rails::Railte`
520
- - Update `cli info` to reflect the `2.0` details
521
- - Remove responders in favour of WaterDrop `2.0` producer
522
- - Remove pidfiles support
523
- - Remove daemonization support
524
- - Stop validating `kafka` configuration beyond minimum as it is handled by `librdkafka`
525
- - Remove topics mappers concept
526
- - Reorganize monitoring to match new concepts
527
- - Notify on fatal worker processing errors
528
- - Rename `Karafka::Params::BatchMetadata` to `Karafka::Messages::BatchMetadata`
529
- - Rename `Karafka::Params::Params` to `Karafka::Messages::Message`
530
- - Rename `#params_batch` in consumers to `#messages`
531
- - Rename `Karafka::Params::Metadata` to `Karafka::Messages::Metadata`
532
- - Allow for processing work of multiple consumer groups by the same worker poll
533
- - Rename `Karafka::Fetcher` to `Karafka::Runner` and align notifications key names
534
- - Update install templates
535
- - `sidekiq-backend` is no longer supported
536
- - `testing` gem for RSpec has been updated
537
- - `WaterDrop` `2.1+` support
538
- - Simple routing style (`0.5`) now builds a single consumer group instead of one per topic
539
- - Example apps were updated
540
- - Hook for underlying statistics emitted from librdkafka have been added
541
- - Hook for underlying async errors emitted from librdkafka have been added
542
- - ActiveJob Rails adapter
543
- - Added benchmarks that can be used to profile Karafka
544
- - Standardize error hook for all error reporting
545
-
546
- ## 1.4.11 (2021-12-04)
547
- - Source code metadata url added to the gemspec
548
- - Gem bump
549
-
550
- ## 1.4.10 (2021-10-30)
551
- - update gems requirements in the gemspec (nijikon)
552
-
553
- ## 1.4.9 (2021-09-29)
554
- - fix `dry-configurable` deprecation warnings for default value as positional argument
555
-
556
- ## 1.4.8 (2021-09-08)
557
- - Allow 'rails' in Gemfile to enable rails-aware generator (rewritten)
558
-
559
- ## 1.4.7 (2021-09-04)
560
- - Update ruby-kafka to `1.4.0`
561
- - Support for `resolve_seed_brokers` option (with Azdaroth)
562
- - Set minimum `ruby-kafka` requirement to `1.3.0`
563
-
564
- ## 1.4.6 (2021-08-05)
565
- - #700 Fix Ruby 3 compatibility issues in Connection::Client#pause (MmKolodziej)
566
-
567
- ## 1.4.5 (2021-06-16)
568
- - Fixup logger checks for non-writeable logfile (ojab)
569
- - #689 - Update the stdout initialization message for framework initialization
570
-
571
- ## 1.4.4 (2021-04-19)
572
- - Remove Ruby 2.5 support and update minimum Ruby requirement to 2.6
573
- - Remove rake dependency
574
-
575
- ## 1.4.3 (2021-03-24)
576
- - Fixes for Ruby 3.0 compatibility
577
-
578
- ## 1.4.2 (2021-02-16)
579
- - Rescue Errno::EROFS in ensure_dir_exists (unasuke)
580
-
581
- ## 1.4.1 (2020-12-04)
582
- - Return non-zero exit code when printing usage
583
- - Add support for :assignment_strategy for consumers
584
-
585
- ## 1.4.0 (2020-09-05)
586
- - Rename `Karafka::Params::Metadata` to `Karafka::Params::BatchMetadata`
587
- - Rename consumer `#metadata` to `#batch_metadata`
588
- - Separate metadata (including Karafka native metadata) from the root of params (backwards compatibility preserved thanks to rabotyaga)
589
- - Remove metadata hash dependency
590
- - Remove params dependency on a hash in favour of PORO
591
- - Remove batch metadata dependency on a hash
592
- - Remove MultiJson in favour of JSON in the default deserializer
593
- - allow accessing all the metadata without accessing the payload
594
- - freeze params and underlying elements except for the mutable payload
595
- - provide access to raw payload after serialization
596
- - fixes a bug where a non-deserializable (error) params would be marked as deserialized after first unsuccessful deserialization attempt
597
- - fixes bug where karafka would mutate internal ruby-kafka state
598
- - fixes bug where topic name in metadata would not be mapped using topic mappers
599
- - simplifies the params and params batch API, before `#payload` usage, it won't be deserialized
600
- - removes the `#[]` API from params to prevent from accessing raw data in a different way than #raw_payload
601
- - makes the params batch operations consistent as params payload is deserialized only when accessed explicitly
602
-
603
- ## 1.3.7 (2020-08-11)
604
- - #599 - Allow metadata access without deserialization attempt (rabotyaga)
605
- - Sync with ruby-kafka `1.2.0` api
606
-
607
- ## 1.3.6 (2020-04-24)
608
- - #583 - Use Karafka.logger for CLI messages (prikha)
609
- - #582 - Cannot only define seed brokers in consumer groups
610
-
611
- ## 1.3.5 (2020-04-02)
612
- - #578 - ThreadError: can't be called from trap context patch
613
-
614
- ## 1.3.4 (2020-02-17)
615
- - `dry-configurable` upgrade (solnic)
616
- - Remove temporary `thor` patches that are no longer needed
617
-
618
- ## 1.3.3 (2019-12-23)
619
- - Require `delegate` to fix missing dependency in `ruby-kafka`
620
-
621
- ## 1.3.2 (2019-12-23)
622
- - #561 - Allow `thor` 1.0.x usage in Karafka
623
- - #567 - Ruby 2.7.0 support + unfreeze of a frozen string fix
624
-
625
- ## 1.3.1 (2019-11-11)
626
- - #545 - Makes sure the log directory exists when is possible (robertomiranda)
627
- - Ruby 2.6.5 support
628
- - #551 - add support for DSA keys
629
- - #549 - Missing directories after `karafka install` (nijikon)
630
-
631
- ## 1.3.0 (2019-09-09)
632
- - Drop support for Ruby 2.4
633
- - YARD docs tags cleanup
634
-
635
- ## 1.3.0.rc1 (2019-07-31)
636
- - Drop support for Kafka 0.10 in favor of native support for Kafka 0.11.
637
- - Update ruby-kafka to the 0.7 version
638
- - Support messages headers receiving
639
- - Message bus unification
640
- - Parser available in metadata
641
- - Cleanup towards moving to a non-global state app management
642
- - Drop Ruby 2.3 support
643
- - Support for Ruby 2.6.3
644
- - `Karafka::Loader` has been removed in favor of Zeitwerk
645
- - Schemas are now contracts
646
- - #393 - Reorganize responders - removed `multiple_usage` constrain
647
- - #388 - ssl_client_cert_chain sync
648
- - #300 - Store value in a value key and replace its content with parsed version - without root merge
649
- - #331 - Disallow building groups without topics
650
- - #340 - Instrumentation unification. Better and more consistent naming
651
- - #340 - Procline instrumentation for a nicer process name
652
- - #342 - Change default for `fetcher_max_queue_size` from `100` to `10` to lower max memory usage
653
- - #345 - Cleanup exceptions names
654
- - #341 - Split connection delegator into batch delegator and single_delegator
655
- - #351 - Rename `#retrieve!` to `#parse!` on params and `#parsed` to `parse!` on params batch.
656
- - #351 - Adds '#first' for params_batch that returns parsed first element from the params_batch object.
657
- - #360 - Single params consuming mode automatically parses data specs
658
- - #359 - Divide mark_as_consumed into mark_as_consumed and mark_as_consumed!
659
- - #356 - Provide a `#values` for params_batch to extract only values of objects from the params_batch
660
- - #363 - Too shallow ruby-kafka version lock
661
- - #354 - Expose consumer heartbeat
662
- - #377 - Remove the persistent setup in favor of persistence
663
- - #375 - Sidekiq Backend parser mismatch
664
- - #369 - Single consumer can support more than one topic
665
- - #288 - Drop dependency on `activesupport` gem
666
- - #371 - SASL over SSL
667
- - #392 - Move params redundant data to metadata
668
- - #335 - Metadata access from within the consumer
669
- - #402 - Delayed reconnection upon critical failures
670
- - #405 - `reconnect_timeout` value is now being validated
671
- - #437 - Specs ensuring that the `#437` won't occur in the `1.3` release
672
- - #426 - ssl client cert key password
673
- - #444 - add certificate and private key validation
674
- - #460 - Decouple responder "parser" (generator?) from topic.parser (benissimo)
675
- - #463 - Split parsers into serializers / deserializers
676
- - #473 - Support SASL OAuthBearer Authentication
677
- - #475 - Disallow subscribing to the same topic with multiple consumers
678
- - #485 - Setting shutdown_timeout to nil kills the app without waiting for anything
679
- - #487 - Make listeners as instances
680
- - #29 - Consumer class names must have the word "Consumer" in it in order to work (Sidekiq backend)
681
- - #491 - irb is missing for console to work
682
- - #502 - Karafka process hangs when sending multiple sigkills
683
- - #506 - ssl_verify_hostname sync
684
- - #483 - Upgrade dry-validation before releasing 1.3
685
- - #492 - Use Zeitwerk for code reload in development
686
- - #508 - Reset the consumers instances upon reconnecting to a cluster
687
- - [#530](https://github.com/karafka/karafka/pull/530) - expose ruby and ruby-kafka version
688
- - [534](https://github.com/karafka/karafka/pull/534) - Allow to use headers in the deserializer object
689
- - [#319](https://github.com/karafka/karafka/pull/328) - Support for exponential backoff in pause
690
-
691
- ## 1.2.11
692
- - [#470](https://github.com/karafka/karafka/issues/470) Karafka not working with dry-configurable 0.8
693
-
694
- ## 1.2.10
695
- - [#453](https://github.com/karafka/karafka/pull/453) require `Forwardable` module
696
-
697
- ## 1.2.9
698
- - Critical exceptions now will cause consumer to stop instead of retrying without a break
699
- - #412 - Fix dry-inflector dependency lock in gemspec
700
- - #414 - Backport to 1.2 the delayed retry upon failure
701
- - #437 - Raw message is no longer added to params after ParserError raised
702
-
703
- ## 1.2.8
704
- - #408 - Responder Topic Lookup Bug on Heroku
705
-
706
- ## 1.2.7
707
- - Unlock Ruby-kafka version with a warning
708
-
709
- ## 1.2.6
710
- - Lock WaterDrop to 1.2.3
711
- - Lock Ruby-Kafka to 0.6.x (support for 0.7 will be added in Karafka 1.3)
712
- - #382 - Full logging with AR, etc for development mode when there is Rails integration
713
-
714
- ## 1.2.5
715
- - #354 - Expose consumer heartbeat
716
- - #373 - Async producer not working properly with responders
717
-
718
- ## 1.2.4
719
- - #332 - Fetcher for max queue size
720
-
721
- ## 1.2.3
722
- - #313 - support PLAINTEXT and SSL for scheme
723
- - #288 - drop activesupport callbacks in favor of notifications
724
- - #320 - Pausing indefinitely with nil pause timeout doesn't work
725
- - #318 - Partition pausing doesn't work with custom topic mappers
726
- - Rename ConfigAdapter to ApiAdapter to better reflect what it does
727
- - #317 - Manual offset committing doesn't work with custom topic mappers
728
-
729
- ## 1.2.2
730
- - #312 - Broken for ActiveSupport 5.2.0
731
-
732
- ## 1.2.1
733
- - #304 - Unification of error instrumentation event details
734
- - #306 - Using file logger from within a trap context upon shutdown is impossible
735
-
736
- ## 1.2.0
737
- - Spec improvements
738
- - #260 - Specs missing randomization
739
- - #251 - Shutdown upon non responding (unreachable) cluster is not possible
740
- - #258 - Investigate lowering requirements on activesupport
741
- - #246 - Alias consumer#mark_as_consumed on controller
742
- - #259 - Allow forcing key/partition key on responders
743
- - #267 - Styling inconsistency
744
- - #242 - Support setting the max bytes to fetch per request
745
- - #247 - Support SCRAM once released
746
- - #271 - Provide an after_init option to pass a configuration block
747
- - #262 - Error in the monitor code for NewRelic
748
- - #241 - Performance metrics
749
- - #274 - Rename controllers to consumers
750
- - #184 - Seek to
751
- - #284 - Dynamic Params parent class
752
- - #275 - ssl_ca_certs_from_system
753
- - #296 - Instrument forceful exit with an error
754
- - Replaced some of the activesupport parts with dry-inflector
755
- - Lower ActiveSupport dependency
756
- - Remove configurators in favor of the after_init block configurator
757
- - Ruby 2.5.0 support
758
- - Renamed Karafka::Connection::Processor to Karafka::Connection::Delegator to match incoming naming conventions
759
- - Renamed Karafka::Connection::Consumer to Karafka::Connection::Client due to #274
760
- - Removed HashWithIndifferentAccess in favor of a regular hash
761
- - JSON parsing defaults now to string keys
762
- - Lower memory usage due to less params data internal details
763
- - Support multiple ```after_init``` blocks in favor of a single one
764
- - Renamed ```received_at``` to ```receive_time``` to follow ruby-kafka and WaterDrop conventions
765
- - Adjust internal setup to easier map Ruby-Kafka config changes
766
- - System callbacks reorganization
767
- - Added ```before_fetch_loop``` configuration block for early client usage (```#seek```, etc)
768
- - Renamed ```after_fetched``` to ```after_fetch``` to normalize the naming convention
769
- - Instrumentation on a connection delegator level
770
- - Added ```params_batch#last``` method to retrieve last element after unparsing
771
- - All params keys are now strings
772
-
773
- ## 1.1.2
774
- - #256 - Default kafka.seed_brokers configuration is created in invalid format
775
-
776
- ## 1.1.1
777
- - #253 - Allow providing a global per app parser in config settings
778
-
779
- ## 1.1.0
780
- - Gem bump
781
- - Switch from Celluloid to native Thread management
782
- - Improved shutdown process
783
- - Introduced optional fetch callbacks and moved current the ```after_received``` there as well
784
- - Karafka will raise Errors::InvalidPauseTimeout exception when trying to pause but timeout set to 0
785
- - Allow float for timeouts and other time based second settings
786
- - Renamed MessagesProcessor to Processor and MessagesConsumer to Consumer - we don't process and don't consumer anything else so it was pointless to keep this "namespace"
787
- - #232 - Remove unused ActiveSupport require
788
- - #214 - Expose consumer on a controller layer
789
- - #193 - Process shutdown callbacks
790
- - Fixed accessibility of ```#params_batch``` from the outside of the controller
791
- - connection_pool config options are no longer required
792
- - celluloid config options are no longer required
793
- - ```#perform``` is now renamed to ```#consume``` with warning level on using the old one (deprecated)
794
- - #235 - Rename perform to consume
795
- - Upgrade to ruby-kafka 0.5
796
- - Due to redesign of Waterdrop concurrency setting is no longer needed
797
- - #236 - Manual offset management
798
- - WaterDrop 1.0.0 support with async
799
- - Renamed ```batch_consuming``` option to ```batch_fetching``` as it is not a consumption (with processing) but a process of fetching messages from Kafka. The messages is considered consumed, when it is processed.
800
- - Renamed ```batch_processing``` to ```batch_consuming``` to resemble Kafka concept of consuming messages.
801
- - Renamed ```after_received``` to ```after_fetched``` to normalize the naming conventions.
802
- - Responders support the per topic ```async``` option.
803
-
804
- ## 1.0.1
805
- - #210 - LoadError: cannot load such file -- [...]/karafka.rb
806
- - Ruby 2.4.2 as a default (+travis integration)
807
- - JRuby upgrade
808
- - Expanded persistence layer (moved to a namespace for easier future development)
809
- - #213 - Misleading error when non-existing dependency is required
810
- - #212 - Make params react to #topic, #partition, #offset
811
- - #215 - Consumer group route dynamic options are ignored
812
- - #217 - check RUBY_ENGINE constant if RUBY_VERSION is missing (#217)
813
- - #218 - add configuration setting to control Celluloid's shutdown timeout
814
- - Renamed Karafka::Routing::Mapper to Karafka::Routing::TopicMapper to match naming conventions
815
- - #219 - Allow explicit consumer group names, without prefixes
816
- - Fix to early removed pid upon shutdown of demonized process
817
- - max_wait_time updated to match https://github.com/zendesk/ruby-kafka/issues/433
818
- - #230 - Better uri validation for seed brokers (incompatibility as the kafka:// or kafka+ssl:// is required)
819
- - Small internal docs fixes
820
- - Dry::Validation::MissingMessageError: message for broker_schema? was not found
821
- - #238 - warning: already initialized constant Karafka::Schemas::URI_SCHEMES
822
-
823
- ## 1.0.0
824
-
825
- ### Closed issues:
826
-
827
- - #103 - Env for logger is loaded 2 early (on gem load not on app init)
828
- - #142 - Possibility to better control Kafka consumers (consumer groups management)
829
- - #150 - Add support for start_from_beginning on a per topic basis
830
- - #154 - Support for min_bytes and max_wait_time on messages consuming
831
- - #160 - Reorganize settings to better resemble ruby-kafka requirements
832
- - #164 - If we decide to have configuration per topic, topic uniqueness should be removed
833
- - #165 - Router validator
834
- - #166 - Params and route reorganization (new API)
835
- - #167 - Remove Sidekiq UI from Karafka
836
- - #168 - Introduce unique IDs of routes
837
- - #171 - Add kafka message metadata to params
838
- - #176 - Transform Karafka::Connection::Consumer into a module
839
- - #177 - Monitor not reacting when kafka killed with -9
840
- - #175 - Allow single consumer to subscribe to multiple topics
841
- - #178 - Remove parsing failover when cannot unparse data
842
- - #174 - Extended config validation
843
- - ~~#180 - Switch from JSON parser to yajl-ruby~~
844
- - #181 - When responder is defined and not used due to ```respond_with``` not being triggered in the perform, it won't raise an exception.
845
- - #188 - Rename name in config to client id
846
- - #186 - Support ruby-kafka ```ssl_ca_cert_file_path``` config
847
- - #189 - karafka console does not preserve history on exit
848
- - #191 - Karafka 0.6.0rc1 does not work with jruby / now it does :-)
849
- - Switch to multi json so everyone can use their favourite JSON parser
850
- - Added jruby support in general and in Travis
851
- - #196 - Topic mapper does not map topics when subscribing thanks to @webandtech
852
- - #96 - Karafka server - possibility to run it only for a certain topics
853
- - ~~karafka worker cli option is removed (please use sidekiq directly)~~ - restored, bad idea
854
- - (optional) pausing upon processing failures ```pause_timeout```
855
- - Karafka console main process no longer intercepts irb errors
856
- - Wiki updates
857
- - #204 - Long running controllers
858
- - Better internal API to handle multiple usage cases using ```Karafka::Controllers::Includer```
859
- - #207 - Rename before_enqueued to after_received
860
- - #147 - De-attach Karafka from Sidekiq by extracting Sidekiq backend
861
-
862
- ### New features and improvements
863
-
864
- - batch processing thanks to ```#batch_consuming``` flag and ```#params_batch``` on controllers
865
- - ```#topic``` method on an controller instance to make a clear distinction in between params and route details
866
- - Changed routing model (still compatible with 0.5) to allow better resources management
867
- - Lower memory requirements due to object creation limitation (2-3 times less objects on each new message)
868
- - Introduced the ```#batch_consuming``` config flag (config for #126) that can be set per each consumer_group
869
- - Added support for partition, offset and partition key in the params hash
870
- - ```name``` option in config renamed to ```client_id```
871
- - Long running controllers with ```persistent``` flag on a topic config level, to make controller instances persistent between messages batches (single controller instance per topic per partition no per messages batch) - turned on by default
872
-
873
- ### Incompatibilities
874
-
875
- - Default boot file is renamed from app.rb to karafka.rb
876
- - Removed worker glass as dependency (now and independent gem)
877
- - ```kafka.hosts``` option renamed to ```kafka.seed_brokers``` - you don't need to provide all the hosts to work with Kafka
878
- - ```start_from_beginning``` moved into kafka scope (```kafka.start_from_beginning```)
879
- - Router no longer checks for route uniqueness - now you can define same routes for multiple kafkas and do a lot of crazy stuff, so it's your responsibility to check uniqueness
880
- - Change in the way we identify topics in between Karafka and Sidekiq workers. If you upgrade, please make sure, all the jobs scheduled in Sidekiq are finished before the upgrade.
881
- - ```batch_mode``` renamed to ```batch_fetching```
882
- - Renamed content to value to better resemble ruby-kafka internal messages naming convention
883
- - When having a responder with ```required``` topics and not using ```#respond_with``` at all, it will raise an exception
884
- - Renamed ```inline_mode``` to ```inline_processing``` to resemble other settings conventions
885
- - Renamed ```inline_processing``` to ```backend``` to reach 1.0 future compatibility
886
- - Single controller **needs** to be used for a single topic consumption
887
- - Renamed ```before_enqueue``` to ```after_received``` to better resemble internal logic, since for inline backend, there is no enqueue.
888
- - Due to the level on which topic and controller are related (class level), the dynamic worker selection is no longer available.
889
- - Renamed params #retrieve to params #retrieve! to better reflect what it does
890
-
891
- ### Other changes
892
- - PolishGeeksDevTools removed (in favour of Coditsu)
893
- - Waaaaaay better code quality thanks to switching from dev tools to Coditsu
894
- - Gem bump
895
- - Cleaner internal API
896
- - SRP
897
- - Better settings proxying and management between ruby-kafka and karafka
898
- - All internal validations are now powered by dry-validation
899
- - Better naming conventions to reflect Kafka reality
900
- - Removed Karafka::Connection::Message in favour of direct message details extraction from Kafka::FetchedMessage
901
-
902
- ## 0.5.0.3
903
- - #132 - When Kafka is gone, should reconnect after a time period
904
- - #136 - new ruby-kafka version + other gem bumps
905
- - ruby-kafka update
906
- - #135 - NonMatchingRouteError - better error description in the code
907
- - #140 - Move Capistrano Karafka to a different specific gem
908
- - #110 - Add call method on a responder class to alias instance build and call
909
- - #76 - Configs validator
910
- - #138 - Possibility to have no worker class defined if inline_mode is being used
911
- - #145 - Topic Mapper
912
- - Ruby update to 2.4.1
913
- - Gem bump x2
914
- - #158 - Update docs section on heroku usage
915
- - #150 - Add support for start_from_beginning on a per topic basis
916
- - #148 - Lower Karafka Sidekiq dependency
917
- - Allow karafka root to be specified from ENV
918
- - Handle SIGTERM as a shutdown command for kafka server to support Heroku deployment
919
-
920
- ## 0.5.0.2
921
- - Gems update x3
922
- - Default Ruby set to 2.3.3
923
- - ~~Default Ruby set to 2.4.0~~
924
- - Readme updates to match bug fixes and resolved issues
925
- - #95 - Allow options into responder
926
- - #98 - Use parser when responding on a topic
927
- - #114 - Option to configure waterdrop connection pool timeout and concurrency
928
- - #118 - Added dot in topic validation format
929
- - #119 - add support for authentication using SSL
930
- - #121 - JSON as a default for standalone responders usage
931
- - #122 - Allow on capistrano role customization
932
- - #125 - Add support to batch incoming messages
933
- - #130 - start_from_beginning flag on routes and default
934
- - #128 - Monitor caller_label not working with super on inheritance
935
- - Renamed *inline* to *inline_mode* to stay consistent with flags that change the way karafka works (#125)
936
- - Dry-configurable bump to 0.5 with fixed proc value evaluation on retrieve patch (internal change)
937
-
938
- ## 0.5.0.1
939
- - Fixed inconsistency in responders non-required topic definition. Now only required: false available
940
- - #101 - Responders fail when multiple_usage true and required false
941
- - fix error on startup from waterdrop #102
942
- - Waterdrop 0.3.2.1 with kafka.hosts instead of kafka_hosts
943
- - #105 - Karafka::Monitor#caller_label not working with inherited monitors
944
- - #99 - Standalone mode (without Sidekiq)
945
- - #97 - Buffer responders single topics before send (pre-validation)
946
- - Better control over consumer thanks to additional config options
947
- - #111 - Dynamic worker assignment based on the income params
948
- - Long shutdown time fix
949
-
950
- ## 0.5.0
951
- - Removed Zookeeper totally as dependency
952
- - Better group and partition rebalancing
953
- - Automatic thread management (no need for tuning) - each topic is a separate actor/thread
954
- - Moved from Poseidon into Ruby-Kafka
955
- - No more max_concurrency setting
956
- - After you define your App class and routes (and everything else) you need to add execute App.boot!
957
- - Manual consuming is no longer available (no more karafka consume command)
958
- - Karafka topics CLI is no longer available. No Zookeeper - no global topic discovery
959
- - Dropped ZK as dependency
960
- - karafka info command no longer prints details about Zookeeper
961
- - Better shutdown
962
- - No more autodiscovery via Zookeeper - instead, the whole cluster will be discovered directly from Kafka
963
- - No more support for Kafka 0.8
964
- - Support for Kafka 0.9
965
- - No more need for ActorCluster, since now we have a single thread (and Kafka connection) per topic
966
- - Ruby 2.2.* support dropped
967
- - Using App name as a Kafka client_id
968
- - Automatic Capistrano integration
969
- - Responders support for handling better responses pipe-lining and better responses flow description and design (see README for more details)
970
- - Gem bump
971
- - Readme updates
972
- - karafka flow CLI command for printing the application flow
973
- - Some internal refactoring
974
-
975
- ## 0.4.2
976
- - #87 - Re-consume mode with crone for better Rails/Rack integration
977
- - Moved Karafka server related stuff into separate Karafka::Server class
978
- - Renamed Karafka::Runner into Karafka::Fetcher
979
- - Gem bump
980
- - Added chroot option to Zookeeper options
981
- - Moved BROKERS_PATH into config from constant
982
- - Added Karafka consume CLI action for a short running single consumption round
983
- - Small fixes to close broken connections
984
- - Readme updates
985
-
986
- ## 0.4.1
987
- - Explicit throw(:abort) required to halt before_enqueue (like in Rails 5)
988
- - #61 - autodiscovery of Kafka brokers based on Zookeeper data
989
- - #63 - Graceful shutdown with current offset state during data processing
990
- - #65 - Example of NewRelic monitor is outdated
991
- - #71 - Setup should be executed after user code is loaded
992
- - Gem bump x3
993
- - Rubocop remarks
994
- - worker_timeout config option has been removed. It now needs to be defined manually by the framework user because WorkerGlass::Timeout can be disabled and we cannot use Karafka settings on a class level to initialize user code stuff
995
- - Moved setup logic under setup/Setup namespace
996
- - Better defaults handling
997
- - #75 - Kafka and Zookeeper options as a hash
998
- - #82 - Karafka autodiscovery fails upon caching of configs
999
- - #81 - Switch config management to dry configurable
1000
- - Version fix
1001
- - Dropped support for Ruby 2.1.*
1002
- - Ruby bump to 2.3.1
1003
-
1004
- ## 0.4.0
1005
- - Added WaterDrop gem with default configuration
1006
- - Refactoring of config logic to simplify adding new dependencies that need to be configured based on #setup data
1007
- - Gem bump
1008
- - Readme updates
1009
- - Renamed cluster to actor_cluster for method names
1010
- - Replaced SidekiqGlass with generic WorkerGlass lib
1011
- - Application bootstrap in app.rb no longer required
1012
- - Karafka.boot needs to be executed after all the application files are loaded (template updated)
1013
- - Small loader refactor (no API changes)
1014
- - Ruby 2.3.0 support (default)
1015
- - No more rake tasks
1016
- - Karafka CLI instead of rake tasks
1017
- - Worker cli command allows passing additional options directly to Sidekiq
1018
- - Renamed concurrency to max_concurrency - it describes better what happens - Karafka will use this number of threads only when required
1019
- - Added wait_timeout that allows us to tune how long should we wait on a single socket connection (single topic) for new messages before going to next one (this applies to each thread separately)
1020
- - Rubocop remarks
1021
- - Removed Sinatra and Puma dependencies
1022
- - Karafka Cli internal reorganization
1023
- - Karafka Cli routes task
1024
- - #37 - warn log for failed parsing of a message
1025
- - #43 - wrong constant name
1026
- - #44 - Method name conflict
1027
- - #48 - Cannot load such file -- celluloid/current
1028
- - #46 - Loading application
1029
- - #45 - Set up monitor in config
1030
- - #47 - rake karafka:run uses app.rb only
1031
- - #53 - README update with Sinatra/Rails integration description
1032
- - #41 - New Routing engine
1033
- - #54 - Move Karafka::Workers::BaseWorker to Karafka::BaseWorker
1034
- - #55 - ApplicationController and ApplicationWorker
1035
-
1036
- ## 0.3.2
1037
- - Karafka::Params::Params lazy load merge keys with string/symbol names priorities fix
1038
-
1039
- ## 0.3.1
1040
- - Renamed Karafka::Monitor to Karafka::Process to represent a Karafka process wrapper
1041
- - Added Karafka::Monitoring that allows to add custom logging and monitoring with external libraries and systems
1042
- - Moved logging functionality into Karafka::Monitoring default monitoring
1043
- - Added possibility to provide own monitoring as long as in responds to #notice and #notice_error
1044
- - Standardized logging format for all logs
1045
-
1046
- ## 0.3.0
1047
- - Switched from custom ParserError for each parser to general catching of Karafka::Errors::ParseError and its descendants
1048
- - Gem bump
1049
- - Fixed #32 - now when using custom workers that does not inherit from Karafka::BaseWorker perform method is not required. Using custom workers means that the logic that would normally lie under #perform, needs to be executed directly from the worker.
1050
- - Fixed #31 - Technically didn't fix because this is how Sidekiq is meant to work, but provided possibility to assign custom interchangers that allow to bypass JSON encoding issues by converting data that goes to Redis to a required format (and parsing it back when it is fetched)
1051
- - Added full parameters lazy load - content is no longer loaded during #perform_async if params are not used in before_enqueue
1052
- - No more namespaces for Redis by default (use separate DBs)
1053
-
1054
- ## 0.1.21
1055
- - Sidekiq 4.0.1 bump
1056
- - Gem bump
1057
- - Added direct celluloid requirement to Karafka (removed from Sidekiq)
1058
-
1059
- ## 0.1.19
1060
- - Internal call - schedule naming change
1061
- - Enqueue to perform_async naming in controller to follow Sidekiq naming convention
1062
- - Gem bump
1063
-
1064
- ## 0.1.18
1065
- - Changed Redis configuration options into a single hash that is directly passed to Redis setup for Sidekiq
1066
- - Added config.ru to provide a Sidekiq web UI (see README for more details)
1067
-
1068
- ## 0.1.17
1069
- - Changed Karafka::Connection::Cluster tp Karafka::Connection::ActorCluster to distinguish between a single thread actor cluster for multiple topic connection and a future feature that will allow process clusterization.
1070
- - Add an ability to use user-defined parsers for a messages
1071
- - Lazy load params for before callbacks
1072
- - Automatic loading/initializing all workers classes during startup (so Sidekiq won't fail with unknown workers exception)
1073
- - Params are now private to controller
1074
- - Added bootstrap method to app.rb
1075
-
1076
- ## 0.1.16
1077
- - Cluster level error catching for all exceptions so actor is not killer
1078
- - Cluster level error logging
1079
- - Listener refactoring (QueueConsumer extracted)
1080
- - Karafka::Connection::QueueConsumer to wrap around fetching logic - technically we could replace Kafka with any other messaging engine as long as we preserve the same API
1081
- - Added debug env for debugging purpose in applications
1082
-
1083
- ## 0.1.15
1084
- - Fixed max_wait_ms vs socket_timeout_ms issue
1085
- - Fixed closing queue connection after Poseidon::Errors::ProtocolError failure
1086
- - Fixed wrong logging file selection based on env
1087
- - Extracted Karafka::Connection::QueueConsumer object to wrap around queue connection
1088
-
1089
- ## 0.1.14
1090
- - Rake tasks for listing all the topics on Kafka server (rake kafka:topics)
1091
-
1092
- ## 0.1.13
1093
- - Ability to assign custom workers and use them bypassing Karafka::BaseWorker (or its descendants)
1094
- - Gem bump
1095
-
1096
- ## 0.1.12
1097
- - All internal errors went to Karafka::Errors namespace
1098
-
1099
- ## 0.1.11
1100
- - Rescuing all the "before Sidekiq" processing so errors won't affect other incoming messages
1101
- - Fixed dying actors after connection error
1102
- - Added a new app status - "initializing"
1103
- - Karafka::Status model cleanup
1104
-
1105
- ## 0.1.10
1106
- - Added possibility to specify redis namespace in configuration (failover to app name)
1107
- - Renamed redis_host to redis_url in configuration
1108
-
1109
- ## 0.1.9
1110
- - Added worker logger
1111
-
1112
- ## 0.1.8
1113
- - Dropped local env support in favour of [Envlogic](https://github.com/karafka/envlogic) - no changes in API
1114
-
1115
- ## 0.1.7
1116
- - Karafka option for Redis hosts (not localhost only)
1117
-
1118
- ## 0.1.6
1119
- - Added better concurency by clusterization of listeners
1120
- - Added graceful shutdown
1121
- - Added concurency that allows to handle bigger applications with celluloid
1122
- - Karafka controllers no longer require group to be defined (created based on the topic and app name)
1123
- - Karafka controllers no longer require topic to be defined (created based on the controller name)
1124
- - Readme updates
1125
-
1126
- ## 0.1.5
1127
- - Celluloid support for listeners
1128
- - Multi target logging (STDOUT and file)
1129
-
1130
- ## 0.1.4
1131
- - Renamed events to messages to follow Apache Kafka naming convention
1132
-
1133
- ## 0.1.3
1134
- - Karafka::App.logger moved to Karafka.logger
1135
- - README updates (Usage section was added)
1136
-
1137
- ## 0.1.2
1138
- - Logging to log/environment.log
1139
- - Karafka::Runner
1140
-
1141
- ## 0.1.1
1142
- - README updates
1143
- - Rake tasks updates
1144
- - Rake installation task
1145
- - Changelog file added
1146
-
1147
- ## 0.1.0
1148
- - Initial framework code
380
+ ## Older releases
381
+
382
+ This changelog tracks Karafka `2.0` and higher changes.
383
+
384
+ If you are looking for changes in the unsupported releases, we recommend checking the [`1.4`](https://github.com/karafka/karafka/blob/1.4/CHANGELOG.md) branch of the Karafka repository.