karafka 2.5.10.rc1 → 2.6.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +65 -6
  3. data/certs/expired.txt +2 -0
  4. data/config/locales/errors.yml +19 -7
  5. data/karafka.gemspec +3 -3
  6. data/lib/active_job/queue_adapters/karafka_adapter.rb +2 -3
  7. data/lib/karafka/active_job/current_attributes/loading.rb +1 -1
  8. data/lib/karafka/active_job/current_attributes.rb +4 -2
  9. data/lib/karafka/active_job/dispatcher.rb +1 -2
  10. data/lib/karafka/active_job/job_extensions.rb +1 -2
  11. data/lib/karafka/admin/configs/resource.rb +1 -2
  12. data/lib/karafka/admin/consumer_groups.rb +117 -100
  13. data/lib/karafka/admin/isolation_levels.rb +22 -0
  14. data/lib/karafka/admin/replication.rb +6 -3
  15. data/lib/karafka/admin/topics.rb +127 -12
  16. data/lib/karafka/admin.rb +202 -78
  17. data/lib/karafka/app.rb +16 -5
  18. data/lib/karafka/base_consumer.rb +35 -7
  19. data/lib/karafka/cli/console.rb +0 -1
  20. data/lib/karafka/cli/contracts/server.rb +4 -4
  21. data/lib/karafka/cli/help.rb +0 -1
  22. data/lib/karafka/cli/info.rb +1 -2
  23. data/lib/karafka/cli/install.rb +0 -1
  24. data/lib/karafka/cli/server.rb +0 -1
  25. data/lib/karafka/cli/swarm.rb +0 -1
  26. data/lib/karafka/cli/topics/base.rb +10 -18
  27. data/lib/karafka/cli/topics/repartition.rb +1 -1
  28. data/lib/karafka/cli.rb +2 -2
  29. data/lib/karafka/connection/client.rb +77 -15
  30. data/lib/karafka/connection/consumer_groups/rebalance_manager.rb +120 -0
  31. data/lib/karafka/connection/listener.rb +8 -8
  32. data/lib/karafka/connection/listeners_batch.rb +1 -1
  33. data/lib/karafka/connection/manager.rb +0 -1
  34. data/lib/karafka/connection/mode.rb +1 -2
  35. data/lib/karafka/connection/pauses_manager.rb +17 -0
  36. data/lib/karafka/connection/proxy.rb +45 -0
  37. data/lib/karafka/connection/raw_messages_buffer.rb +0 -5
  38. data/lib/karafka/connection/status.rb +0 -1
  39. data/lib/karafka/declaratives/builder.rb +65 -0
  40. data/lib/karafka/declaratives/contracts/topic.rb +28 -0
  41. data/lib/karafka/declaratives/repository.rb +52 -0
  42. data/lib/karafka/declaratives/topic.rb +100 -0
  43. data/lib/karafka/declaratives.rb +9 -0
  44. data/lib/karafka/instrumentation/assignments_tracker.rb +34 -0
  45. data/lib/karafka/instrumentation/callbacks/consumer_groups/decorator.rb +19 -0
  46. data/lib/karafka/instrumentation/callbacks/consumer_groups/error.rb +55 -0
  47. data/lib/karafka/instrumentation/callbacks/consumer_groups/rebalance.rb +93 -0
  48. data/lib/karafka/instrumentation/callbacks/consumer_groups/statistics.rb +60 -0
  49. data/lib/karafka/instrumentation/critical_errors_listener.rb +85 -0
  50. data/lib/karafka/instrumentation/logger_listener.rb +10 -9
  51. data/lib/karafka/instrumentation/monitor.rb +2 -3
  52. data/lib/karafka/instrumentation/vendors/appsignal/errors_listener.rb +0 -1
  53. data/lib/karafka/instrumentation/vendors/appsignal/metrics_listener.rb +13 -15
  54. data/lib/karafka/instrumentation/vendors/datadog/logger_listener.rb +4 -3
  55. data/lib/karafka/instrumentation/vendors/datadog/metrics_listener.rb +7 -10
  56. data/lib/karafka/instrumentation/vendors/kubernetes/base_listener.rb +7 -3
  57. data/lib/karafka/instrumentation/vendors/kubernetes/liveness_listener.rb +181 -18
  58. data/lib/karafka/licenser.rb +16 -3
  59. data/lib/karafka/pro/active_job/consumer.rb +1 -2
  60. data/lib/karafka/pro/active_job/dispatcher.rb +1 -2
  61. data/lib/karafka/pro/admin/recovery/errors.rb +0 -1
  62. data/lib/karafka/pro/admin/recovery.rb +25 -23
  63. data/lib/karafka/pro/base_consumer.rb +6 -6
  64. data/lib/karafka/pro/cleaner/messages/metadata.rb +0 -1
  65. data/lib/karafka/pro/cli/contracts/server.rb +5 -5
  66. data/lib/karafka/pro/cli/parallel_segments/base.rb +8 -9
  67. data/lib/karafka/pro/cli/parallel_segments/collapse.rb +4 -4
  68. data/lib/karafka/pro/cli/parallel_segments/distribute.rb +6 -6
  69. data/lib/karafka/pro/connection/manager.rb +7 -4
  70. data/lib/karafka/pro/encryption/messages/middleware.rb +5 -0
  71. data/lib/karafka/pro/encryption/messages/parser.rb +4 -0
  72. data/lib/karafka/pro/{routing/features/long_running_job/topic.rb → instrumentation/callbacks/consumer_groups/decorator.rb} +20 -27
  73. data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/compensator.rb +120 -0
  74. data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/fetcher.rb +88 -0
  75. data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/refresher.rb +185 -0
  76. data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/registry.rb +102 -0
  77. data/lib/karafka/pro/instrumentation/performance_tracker.rb +40 -6
  78. data/lib/karafka/pro/iterator/tpl_builder.rb +58 -18
  79. data/lib/karafka/pro/iterator.rb +22 -7
  80. data/lib/karafka/pro/loader.rb +25 -12
  81. data/lib/karafka/pro/processing/consumer_groups/adaptive_iterator/consumer.rb +81 -0
  82. data/lib/karafka/pro/processing/consumer_groups/adaptive_iterator/tracker.rb +95 -0
  83. data/lib/karafka/pro/processing/consumer_groups/collapser.rb +81 -0
  84. data/lib/karafka/pro/processing/consumer_groups/coordinator.rb +199 -0
  85. data/lib/karafka/pro/processing/consumer_groups/coordinators/errors_tracker.rb +121 -0
  86. data/lib/karafka/pro/processing/consumer_groups/coordinators/filters_applier.rb +168 -0
  87. data/lib/karafka/pro/processing/consumer_groups/coordinators/virtual_offset_manager.rb +212 -0
  88. data/lib/karafka/pro/processing/{filters/expirer.rb → consumer_groups/executor.rb} +17 -31
  89. data/lib/karafka/pro/processing/{jobs/eofed_non_blocking.rb → consumer_groups/expansions_selector.rb} +15 -12
  90. data/lib/karafka/pro/processing/consumer_groups/filters/actions.rb +84 -0
  91. data/lib/karafka/pro/processing/consumer_groups/filters/base.rb +102 -0
  92. data/lib/karafka/pro/processing/consumer_groups/filters/delayer.rb +89 -0
  93. data/lib/karafka/pro/processing/consumer_groups/filters/expirer.rb +75 -0
  94. data/lib/karafka/pro/processing/consumer_groups/filters/inline_insights_delayer.rb +96 -0
  95. data/lib/karafka/pro/processing/consumer_groups/filters/throttler.rb +103 -0
  96. data/lib/karafka/pro/processing/consumer_groups/filters/virtual_limiter.rb +76 -0
  97. data/lib/karafka/pro/processing/{jobs → consumer_groups/jobs}/consume_non_blocking.rb +20 -17
  98. data/lib/karafka/pro/processing/{strategies/mom/default.rb → consumer_groups/jobs/eofed_non_blocking.rb} +13 -22
  99. data/lib/karafka/pro/processing/{virtual_partitions/distributors/consistent.rb → consumer_groups/jobs/periodic.rb} +23 -14
  100. data/lib/karafka/pro/processing/{jobs → consumer_groups/jobs}/periodic_non_blocking.rb +14 -11
  101. data/lib/karafka/pro/processing/consumer_groups/jobs/revoked_non_blocking.rb +57 -0
  102. data/lib/karafka/pro/processing/consumer_groups/jobs_builder.rb +96 -0
  103. data/lib/karafka/pro/processing/{filters/delayer.rb → consumer_groups/offset_metadata/consumer.rb} +21 -46
  104. data/lib/karafka/pro/processing/consumer_groups/offset_metadata/fetcher.rb +152 -0
  105. data/lib/karafka/pro/{routing/features/patterns/config.rb → processing/consumer_groups/offset_metadata/listener.rb} +22 -28
  106. data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/base.rb +100 -0
  107. data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/default.rb +112 -0
  108. data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/mom.rb +93 -0
  109. data/lib/karafka/pro/processing/consumer_groups/partitioner.rb +95 -0
  110. data/lib/karafka/pro/processing/consumer_groups/periodic_job/consumer.rb +87 -0
  111. data/lib/karafka/pro/processing/consumer_groups/piping/consumer.rb +151 -0
  112. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_lrj_mom.rb +94 -0
  113. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_lrj_mom_vp.rb +100 -0
  114. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_mom.rb +89 -0
  115. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_mom_vp.rb +87 -0
  116. data/lib/karafka/pro/processing/{strategies/aj/dlq_ftr_lrj_mom.rb → consumer_groups/strategies/aj/dlq_lrj_mom.rb} +38 -39
  117. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_lrj_mom_vp.rb +91 -0
  118. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_mom.rb +81 -0
  119. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_mom_vp.rb +86 -0
  120. data/lib/karafka/pro/processing/{virtual_partitions/distributors/base.rb → consumer_groups/strategies/aj/ftr_lrj_mom.rb} +17 -14
  121. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/ftr_lrj_mom_vp.rb +88 -0
  122. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/aj/ftr_mom.rb +16 -15
  123. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/ftr_mom_vp.rb +76 -0
  124. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/aj/lrj_mom.rb +16 -14
  125. data/lib/karafka/pro/processing/consumer_groups/strategies/aj/lrj_mom_vp.rb +103 -0
  126. data/lib/karafka/pro/processing/{strategies/aj/ftr_lrj_mom.rb → consumer_groups/strategies/aj/mom.rb} +15 -15
  127. data/lib/karafka/pro/processing/{strategies/mom/ftr.rb → consumer_groups/strategies/aj/mom_vp.rb} +25 -24
  128. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/base.rb +7 -5
  129. data/lib/karafka/pro/processing/consumer_groups/strategies/default.rb +444 -0
  130. data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/default.rb +298 -0
  131. data/lib/karafka/pro/processing/{strategies/aj/ftr_mom_vp.rb → consumer_groups/strategies/dlq/ftr.rb} +29 -28
  132. data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_lrj.rb +92 -0
  133. data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_lrj_mom.rb +94 -0
  134. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/ftr_lrj_mom_vp.rb +22 -20
  135. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/ftr_lrj_vp.rb +19 -18
  136. data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_mom.rb +94 -0
  137. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/ftr_mom_vp.rb +20 -18
  138. data/lib/karafka/pro/processing/{strategies/lrj → consumer_groups/strategies/dlq}/ftr_vp.rb +19 -16
  139. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/lrj.rb +31 -29
  140. data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/lrj_mom.rb +97 -0
  141. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/lrj_mom_vp.rb +15 -13
  142. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/lrj_vp.rb +18 -16
  143. data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/mom.rb +93 -0
  144. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/mom_vp.rb +16 -14
  145. data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/vp.rb +119 -0
  146. data/lib/karafka/pro/processing/consumer_groups/strategies/ftr/default.rb +142 -0
  147. data/lib/karafka/pro/{routing/features/patterns/patterns.rb → processing/consumer_groups/strategies/ftr/vp.rb} +19 -12
  148. data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/default.rb +116 -0
  149. data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr.rb +91 -0
  150. data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr_mom.rb +89 -0
  151. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/lrj/ftr_mom_vp.rb +18 -17
  152. data/lib/karafka/pro/processing/{strategies/mom → consumer_groups/strategies/lrj}/ftr_vp.rb +18 -14
  153. data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/mom.rb +98 -0
  154. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/lrj/mom_vp.rb +16 -15
  155. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/lrj/vp.rb +15 -13
  156. data/lib/karafka/pro/processing/{strategies/aj/mom_vp.rb → consumer_groups/strategies/mom/default.rb} +19 -23
  157. data/lib/karafka/pro/processing/{strategies/dlq → consumer_groups/strategies/mom}/ftr.rb +24 -26
  158. data/lib/karafka/pro/processing/{strategies/aj/mom.rb → consumer_groups/strategies/mom/ftr_vp.rb} +15 -12
  159. data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/mom/vp.rb +14 -12
  160. data/lib/karafka/pro/processing/consumer_groups/strategies/vp/default.rb +202 -0
  161. data/lib/karafka/pro/processing/consumer_groups/strategy_selector.rb +103 -0
  162. data/lib/karafka/pro/processing/{jobs/periodic.rb → consumer_groups/subscription_groups_coordinator.rb} +26 -16
  163. data/lib/karafka/pro/processing/consumer_groups/virtual_partitions/distributors/balanced.rb +79 -0
  164. data/lib/karafka/pro/{routing/features/long_running_job/contracts/topic.rb → processing/consumer_groups/virtual_partitions/distributors/base.rb} +16 -14
  165. data/lib/karafka/pro/processing/consumer_groups/virtual_partitions/distributors/consistent.rb +56 -0
  166. data/lib/karafka/pro/processing/filters/base.rb +3 -61
  167. data/lib/karafka/pro/processing/jobs_queue.rb +4 -1
  168. data/lib/karafka/pro/processing/partitioner.rb +2 -57
  169. data/lib/karafka/pro/processing/schedulers/base.rb +12 -6
  170. data/lib/karafka/pro/processing/schedulers/default.rb +8 -7
  171. data/lib/karafka/pro/recurring_tasks/consumer.rb +9 -2
  172. data/lib/karafka/pro/recurring_tasks/contracts/config.rb +0 -1
  173. data/lib/karafka/pro/recurring_tasks/executor.rb +26 -15
  174. data/lib/karafka/pro/routing/features/{active_job → consumer_groups/active_job}/builder.rb +20 -18
  175. data/lib/karafka/pro/routing/features/{inline_insights/config.rb → consumer_groups/active_job.rb} +5 -9
  176. data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator/config.rb +53 -0
  177. data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator/contracts/topic.rb +91 -0
  178. data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator/topic.rb +90 -0
  179. data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator.rb +50 -0
  180. data/lib/karafka/pro/routing/features/{patterns/contracts/consumer_group.rb → consumer_groups/dead_letter_queue/contracts/topic.rb} +25 -30
  181. data/lib/karafka/pro/routing/features/consumer_groups/dead_letter_queue/topic.rb +70 -0
  182. data/lib/karafka/pro/routing/features/consumer_groups/dead_letter_queue.rb +46 -0
  183. data/lib/karafka/pro/routing/features/{swarm → consumer_groups/delaying}/config.rb +6 -8
  184. data/lib/karafka/pro/routing/features/{patterns/contracts/pattern.rb → consumer_groups/delaying/contracts/topic.rb} +13 -16
  185. data/lib/karafka/pro/routing/features/consumer_groups/delaying/topic.rb +85 -0
  186. data/lib/karafka/pro/routing/features/{adaptive_iterator/config.rb → consumer_groups/delaying.rb} +8 -11
  187. data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/config.rb +46 -0
  188. data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/contracts/consumer_group.rb +68 -0
  189. data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/contracts/topic.rb +125 -0
  190. data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/subscription_group.rb +95 -0
  191. data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/topic.rb +97 -0
  192. data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments.rb +44 -0
  193. data/lib/karafka/pro/routing/features/consumer_groups/inline_insights/config.rb +51 -0
  194. data/lib/karafka/pro/routing/features/consumer_groups/inline_insights/contracts/topic.rb +58 -0
  195. data/lib/karafka/pro/routing/features/consumer_groups/inline_insights/topic.rb +80 -0
  196. data/lib/karafka/pro/routing/features/consumer_groups/inline_insights.rb +45 -0
  197. data/lib/karafka/pro/routing/features/consumer_groups/long_running_job/config.rb +47 -0
  198. data/lib/karafka/pro/routing/features/{multiplexing/patches/contracts/consumer_group.rb → consumer_groups/long_running_job/contracts/topic.rb} +13 -15
  199. data/lib/karafka/pro/routing/features/{offset_metadata/contracts → consumer_groups/long_running_job}/topic.rb +28 -13
  200. data/lib/karafka/pro/routing/features/{direct_assignments/config.rb → consumer_groups/long_running_job.rb} +5 -4
  201. data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/config.rb +58 -0
  202. data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/contracts/routing.rb +83 -0
  203. data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/contracts/topic.rb +148 -0
  204. data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/patches/contracts/consumer_group.rb +61 -0
  205. data/lib/karafka/pro/routing/features/{multiplexing/subscription_group.rb → consumer_groups/multiplexing/proxy.rb} +17 -23
  206. data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/subscription_group.rb +68 -0
  207. data/lib/karafka/pro/routing/features/{multiplexing → consumer_groups/multiplexing}/subscription_groups_builder.rb +16 -14
  208. data/lib/karafka/pro/routing/features/consumer_groups/multiplexing.rb +85 -0
  209. data/lib/karafka/pro/routing/features/consumer_groups/non_blocking_job/topic.rb +51 -0
  210. data/lib/karafka/pro/routing/features/consumer_groups/non_blocking_job.rb +54 -0
  211. data/lib/karafka/pro/routing/features/consumer_groups/offset_metadata/config.rb +52 -0
  212. data/lib/karafka/pro/routing/features/consumer_groups/offset_metadata/contracts/topic.rb +59 -0
  213. data/lib/karafka/pro/routing/features/consumer_groups/offset_metadata/topic.rb +87 -0
  214. data/lib/karafka/pro/routing/features/{offset_metadata.rb → consumer_groups/offset_metadata.rb} +16 -14
  215. data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments/builder.rb +74 -0
  216. data/lib/karafka/pro/routing/features/{multiplexing → consumer_groups/parallel_segments}/config.rb +13 -15
  217. data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments/consumer_group.rb +111 -0
  218. data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments/contracts/consumer_group.rb +74 -0
  219. data/lib/karafka/pro/routing/features/{parallel_segments → consumer_groups/parallel_segments}/topic.rb +24 -22
  220. data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments.rb +51 -0
  221. data/lib/karafka/pro/routing/features/{patterns → consumer_groups/patterns}/builder.rb +15 -13
  222. data/lib/karafka/pro/routing/features/{delaying/contracts/topic.rb → consumer_groups/patterns/config.rb} +22 -12
  223. data/lib/karafka/pro/routing/features/consumer_groups/patterns/consumer_group.rb +92 -0
  224. data/lib/karafka/pro/routing/features/consumer_groups/patterns/contracts/consumer_group.rb +83 -0
  225. data/lib/karafka/pro/routing/features/{parallel_segments.rb → consumer_groups/patterns/contracts/pattern.rb} +23 -10
  226. data/lib/karafka/pro/routing/features/consumer_groups/patterns/contracts/topic.rb +58 -0
  227. data/lib/karafka/pro/routing/features/consumer_groups/patterns/detector.rb +99 -0
  228. data/lib/karafka/pro/routing/features/consumer_groups/patterns/pattern.rb +115 -0
  229. data/lib/karafka/pro/routing/features/{recurring_tasks/contracts/topic.rb → consumer_groups/patterns/patterns.rb} +12 -13
  230. data/lib/karafka/pro/routing/features/consumer_groups/patterns/topic.rb +78 -0
  231. data/lib/karafka/pro/routing/features/consumer_groups/patterns/topics.rb +72 -0
  232. data/lib/karafka/pro/routing/features/consumer_groups/patterns.rb +52 -0
  233. data/lib/karafka/pro/routing/features/consumer_groups/periodic_job/config.rb +56 -0
  234. data/lib/karafka/pro/routing/features/{direct_assignments/contracts/consumer_group.rb → consumer_groups/periodic_job/contracts/topic.rb} +17 -22
  235. data/lib/karafka/pro/routing/features/consumer_groups/periodic_job/topic.rb +122 -0
  236. data/lib/karafka/pro/routing/features/consumer_groups/periodic_job.rb +46 -0
  237. data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks/builder.rb +170 -0
  238. data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks/config.rb +47 -0
  239. data/lib/karafka/pro/routing/features/{inline_insights → consumer_groups/recurring_tasks}/contracts/topic.rb +14 -13
  240. data/lib/karafka/pro/routing/features/{scheduled_messages → consumer_groups/recurring_tasks}/proxy.rb +6 -4
  241. data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks/topic.rb +72 -0
  242. data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks.rb +44 -0
  243. data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/builder.rb +178 -0
  244. data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/config.rb +47 -0
  245. data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/contracts/topic.rb +57 -0
  246. data/lib/karafka/pro/routing/features/{delaying/config.rb → consumer_groups/scheduled_messages/proxy.rb} +6 -4
  247. data/lib/karafka/pro/routing/features/{delaying → consumer_groups/scheduled_messages}/topic.rb +28 -38
  248. data/lib/karafka/pro/routing/features/{recurring_tasks/proxy.rb → consumer_groups/scheduled_messages.rb} +3 -4
  249. data/lib/karafka/pro/routing/features/{non_blocking_job/topic.rb → consumer_groups/swarm/config.rb} +9 -8
  250. data/lib/karafka/pro/routing/features/consumer_groups/swarm/contracts/routing.rb +94 -0
  251. data/lib/karafka/pro/routing/features/consumer_groups/swarm/contracts/topic.rb +95 -0
  252. data/lib/karafka/pro/routing/features/consumer_groups/swarm/topic.rb +105 -0
  253. data/lib/karafka/pro/routing/features/consumer_groups/swarm.rb +58 -0
  254. data/lib/karafka/pro/routing/features/consumer_groups/virtual_partitions/config.rb +69 -0
  255. data/lib/karafka/pro/routing/features/{parallel_segments/contracts/consumer_group.rb → consumer_groups/virtual_partitions/contracts/topic.rb} +21 -18
  256. data/lib/karafka/pro/routing/features/consumer_groups/virtual_partitions/topic.rb +102 -0
  257. data/lib/karafka/pro/routing/features/consumer_groups/virtual_partitions.rb +46 -0
  258. data/lib/karafka/pro/routing/features/{scheduled_messages.rb → consumer_groups.rb} +3 -2
  259. data/lib/karafka/pro/routing/features/expiring/topic.rb +4 -4
  260. data/lib/karafka/pro/routing/features/filtering/topic.rb +3 -3
  261. data/lib/karafka/pro/routing/features/pausing/topic.rb +3 -3
  262. data/lib/karafka/pro/routing/features/throttling/topic.rb +4 -4
  263. data/lib/karafka/pro/scheduled_messages/consumer.rb +7 -1
  264. data/lib/karafka/pro/scheduled_messages/schema_validator.rb +6 -1
  265. data/lib/karafka/pro/swarm/liveness_listener.rb +118 -13
  266. data/lib/karafka/pro.rb +0 -6
  267. data/lib/karafka/processing/consumer_groups/coordinator.rb +220 -0
  268. data/lib/karafka/processing/consumer_groups/coordinators_buffer.rb +73 -0
  269. data/lib/karafka/processing/consumer_groups/executor.rb +220 -0
  270. data/lib/karafka/processing/consumer_groups/executors_buffer.rb +92 -0
  271. data/lib/karafka/processing/consumer_groups/expansions_selector.rb +24 -0
  272. data/lib/karafka/processing/consumer_groups/inline_insights/consumer.rb +45 -0
  273. data/lib/karafka/processing/consumer_groups/inline_insights/listener.rb +21 -0
  274. data/lib/karafka/processing/consumer_groups/inline_insights/tracker.rb +130 -0
  275. data/lib/karafka/processing/consumer_groups/jobs/consume.rb +49 -0
  276. data/lib/karafka/processing/consumer_groups/jobs/eofed.rb +33 -0
  277. data/lib/karafka/processing/consumer_groups/jobs/idle.rb +33 -0
  278. data/lib/karafka/processing/consumer_groups/jobs/revoked.rb +32 -0
  279. data/lib/karafka/processing/consumer_groups/jobs/shutdown.rb +32 -0
  280. data/lib/karafka/processing/consumer_groups/jobs_builder.rb +36 -0
  281. data/lib/karafka/processing/consumer_groups/partitioner.rb +25 -0
  282. data/lib/karafka/processing/consumer_groups/strategies/aj_dlq_mom.rb +51 -0
  283. data/lib/karafka/processing/consumer_groups/strategies/aj_mom.rb +23 -0
  284. data/lib/karafka/processing/consumer_groups/strategies/base.rb +63 -0
  285. data/lib/karafka/processing/consumer_groups/strategies/default.rb +248 -0
  286. data/lib/karafka/processing/consumer_groups/strategies/dlq.rb +160 -0
  287. data/lib/karafka/processing/consumer_groups/strategies/dlq_mom.rb +75 -0
  288. data/lib/karafka/processing/consumer_groups/strategies/mom.rb +32 -0
  289. data/lib/karafka/processing/consumer_groups/strategy_selector.rb +51 -0
  290. data/lib/karafka/processing/coordinator.rb +2 -211
  291. data/lib/karafka/processing/coordinators_buffer.rb +2 -59
  292. data/lib/karafka/processing/partitioner.rb +2 -18
  293. data/lib/karafka/processing/schedulers/default.rb +2 -1
  294. data/lib/karafka/processing/strategy_selector.rb +2 -42
  295. data/lib/karafka/processing/worker.rb +15 -8
  296. data/lib/karafka/processing/workers_pool.rb +21 -4
  297. data/lib/karafka/railtie.rb +0 -1
  298. data/lib/karafka/routing/builder.rb +12 -12
  299. data/lib/karafka/routing/contracts/routing.rb +5 -6
  300. data/lib/karafka/routing/features/base/expander.rb +5 -5
  301. data/lib/karafka/routing/features/consumer_groups/active_job/builder.rb +35 -0
  302. data/lib/karafka/routing/features/consumer_groups/active_job/config.rb +17 -0
  303. data/lib/karafka/routing/features/consumer_groups/active_job/contracts/topic.rb +44 -0
  304. data/lib/karafka/routing/features/consumer_groups/active_job/proxy.rb +16 -0
  305. data/lib/karafka/routing/features/consumer_groups/active_job/topic.rb +51 -0
  306. data/lib/karafka/routing/features/consumer_groups/active_job.rb +15 -0
  307. data/lib/karafka/routing/features/consumer_groups/dead_letter_queue/config.rb +39 -0
  308. data/lib/karafka/routing/features/consumer_groups/dead_letter_queue/contracts/topic.rb +58 -0
  309. data/lib/karafka/routing/features/consumer_groups/dead_letter_queue/topic.rb +76 -0
  310. data/lib/karafka/routing/features/consumer_groups/dead_letter_queue.rb +18 -0
  311. data/lib/karafka/routing/features/consumer_groups/eofed/config.rb +17 -0
  312. data/lib/karafka/routing/features/consumer_groups/eofed/contracts/topic.rb +39 -0
  313. data/lib/karafka/routing/features/consumer_groups/eofed/topic.rb +42 -0
  314. data/lib/karafka/routing/features/consumer_groups/eofed.rb +16 -0
  315. data/lib/karafka/routing/features/consumer_groups/inline_insights/config.rb +17 -0
  316. data/lib/karafka/routing/features/consumer_groups/inline_insights/contracts/topic.rb +27 -0
  317. data/lib/karafka/routing/features/consumer_groups/inline_insights/topic.rb +42 -0
  318. data/lib/karafka/routing/features/consumer_groups/inline_insights.rb +42 -0
  319. data/lib/karafka/routing/features/consumer_groups/manual_offset_management/config.rb +17 -0
  320. data/lib/karafka/routing/features/consumer_groups/manual_offset_management/contracts/topic.rb +27 -0
  321. data/lib/karafka/routing/features/consumer_groups/manual_offset_management/topic.rb +46 -0
  322. data/lib/karafka/routing/features/consumer_groups/manual_offset_management.rb +20 -0
  323. data/lib/karafka/routing/features/consumer_groups.rb +12 -0
  324. data/lib/karafka/routing/features/declaratives/contracts/topic.rb +4 -19
  325. data/lib/karafka/routing/features/declaratives/topic.rb +30 -14
  326. data/lib/karafka/routing/features/deserializers/topic.rb +3 -4
  327. data/lib/karafka/routing/router.rb +2 -2
  328. data/lib/karafka/routing/subscription_group.rb +18 -9
  329. data/lib/karafka/routing/topic.rb +25 -11
  330. data/lib/karafka/routing/topics.rb +21 -1
  331. data/lib/karafka/server.rb +13 -0
  332. data/lib/karafka/setup/config.rb +118 -25
  333. data/lib/karafka/setup/config_proxy.rb +3 -3
  334. data/lib/karafka/setup/contracts/config.rb +25 -8
  335. data/lib/karafka/status.rb +1 -2
  336. data/lib/karafka/swarm/node.rb +10 -2
  337. data/lib/karafka/swarm/supervisor.rb +9 -1
  338. data/lib/karafka/templates/karafka.rb.erb +11 -5
  339. data/lib/karafka/version.rb +1 -2
  340. data/lib/karafka.rb +2 -2
  341. metadata +243 -223
  342. data/lib/karafka/connection/rebalance_manager.rb +0 -116
  343. data/lib/karafka/instrumentation/callbacks/error.rb +0 -52
  344. data/lib/karafka/instrumentation/callbacks/rebalance.rb +0 -84
  345. data/lib/karafka/instrumentation/callbacks/statistics.rb +0 -55
  346. data/lib/karafka/pro/processing/adaptive_iterator/consumer.rb +0 -79
  347. data/lib/karafka/pro/processing/adaptive_iterator/tracker.rb +0 -92
  348. data/lib/karafka/pro/processing/collapser.rb +0 -79
  349. data/lib/karafka/pro/processing/coordinator.rb +0 -197
  350. data/lib/karafka/pro/processing/coordinators/errors_tracker.rb +0 -119
  351. data/lib/karafka/pro/processing/coordinators/filters_applier.rb +0 -152
  352. data/lib/karafka/pro/processing/coordinators/virtual_offset_manager.rb +0 -207
  353. data/lib/karafka/pro/processing/executor.rb +0 -54
  354. data/lib/karafka/pro/processing/expansions_selector.rb +0 -52
  355. data/lib/karafka/pro/processing/filters/inline_insights_delayer.rb +0 -95
  356. data/lib/karafka/pro/processing/filters/throttler.rb +0 -101
  357. data/lib/karafka/pro/processing/filters/virtual_limiter.rb +0 -74
  358. data/lib/karafka/pro/processing/jobs/revoked_non_blocking.rb +0 -56
  359. data/lib/karafka/pro/processing/jobs_builder.rb +0 -90
  360. data/lib/karafka/pro/processing/offset_metadata/consumer.rb +0 -61
  361. data/lib/karafka/pro/processing/offset_metadata/fetcher.rb +0 -149
  362. data/lib/karafka/pro/processing/offset_metadata/listener.rb +0 -63
  363. data/lib/karafka/pro/processing/parallel_segments/filters/base.rb +0 -98
  364. data/lib/karafka/pro/processing/parallel_segments/filters/default.rb +0 -110
  365. data/lib/karafka/pro/processing/parallel_segments/filters/mom.rb +0 -91
  366. data/lib/karafka/pro/processing/periodic_job/consumer.rb +0 -85
  367. data/lib/karafka/pro/processing/piping/consumer.rb +0 -149
  368. data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom_vp.rb +0 -94
  369. data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom.rb +0 -87
  370. data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom_vp.rb +0 -85
  371. data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom.rb +0 -81
  372. data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom_vp.rb +0 -85
  373. data/lib/karafka/pro/processing/strategies/aj/dlq_mom.rb +0 -79
  374. data/lib/karafka/pro/processing/strategies/aj/dlq_mom_vp.rb +0 -84
  375. data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom_vp.rb +0 -86
  376. data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +0 -101
  377. data/lib/karafka/pro/processing/strategies/default.rb +0 -416
  378. data/lib/karafka/pro/processing/strategies/dlq/default.rb +0 -280
  379. data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj.rb +0 -90
  380. data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom.rb +0 -92
  381. data/lib/karafka/pro/processing/strategies/dlq/ftr_mom.rb +0 -92
  382. data/lib/karafka/pro/processing/strategies/dlq/ftr_vp.rb +0 -57
  383. data/lib/karafka/pro/processing/strategies/dlq/lrj_mom.rb +0 -95
  384. data/lib/karafka/pro/processing/strategies/dlq/mom.rb +0 -91
  385. data/lib/karafka/pro/processing/strategies/dlq/vp.rb +0 -57
  386. data/lib/karafka/pro/processing/strategies/ftr/default.rb +0 -141
  387. data/lib/karafka/pro/processing/strategies/ftr/vp.rb +0 -57
  388. data/lib/karafka/pro/processing/strategies/lrj/default.rb +0 -114
  389. data/lib/karafka/pro/processing/strategies/lrj/ftr.rb +0 -89
  390. data/lib/karafka/pro/processing/strategies/lrj/ftr_mom.rb +0 -87
  391. data/lib/karafka/pro/processing/strategies/lrj/mom.rb +0 -96
  392. data/lib/karafka/pro/processing/strategies/vp/default.rb +0 -192
  393. data/lib/karafka/pro/processing/strategies.rb +0 -39
  394. data/lib/karafka/pro/processing/strategy_selector.rb +0 -102
  395. data/lib/karafka/pro/processing/subscription_groups_coordinator.rb +0 -68
  396. data/lib/karafka/pro/processing/virtual_partitions/distributors/balanced.rb +0 -77
  397. data/lib/karafka/pro/routing/features/active_job.rb +0 -43
  398. data/lib/karafka/pro/routing/features/adaptive_iterator/contracts/topic.rb +0 -89
  399. data/lib/karafka/pro/routing/features/adaptive_iterator/topic.rb +0 -88
  400. data/lib/karafka/pro/routing/features/adaptive_iterator.rb +0 -48
  401. data/lib/karafka/pro/routing/features/dead_letter_queue/contracts/topic.rb +0 -74
  402. data/lib/karafka/pro/routing/features/dead_letter_queue/topic.rb +0 -68
  403. data/lib/karafka/pro/routing/features/dead_letter_queue.rb +0 -44
  404. data/lib/karafka/pro/routing/features/delaying.rb +0 -46
  405. data/lib/karafka/pro/routing/features/direct_assignments/contracts/topic.rb +0 -123
  406. data/lib/karafka/pro/routing/features/direct_assignments/subscription_group.rb +0 -95
  407. data/lib/karafka/pro/routing/features/direct_assignments/topic.rb +0 -95
  408. data/lib/karafka/pro/routing/features/direct_assignments.rb +0 -42
  409. data/lib/karafka/pro/routing/features/inline_insights/topic.rb +0 -78
  410. data/lib/karafka/pro/routing/features/inline_insights.rb +0 -43
  411. data/lib/karafka/pro/routing/features/long_running_job/config.rb +0 -45
  412. data/lib/karafka/pro/routing/features/long_running_job.rb +0 -45
  413. data/lib/karafka/pro/routing/features/multiplexing/contracts/routing.rb +0 -81
  414. data/lib/karafka/pro/routing/features/multiplexing/contracts/topic.rb +0 -146
  415. data/lib/karafka/pro/routing/features/multiplexing/proxy.rb +0 -58
  416. data/lib/karafka/pro/routing/features/multiplexing.rb +0 -83
  417. data/lib/karafka/pro/routing/features/non_blocking_job.rb +0 -54
  418. data/lib/karafka/pro/routing/features/offset_metadata/config.rb +0 -50
  419. data/lib/karafka/pro/routing/features/offset_metadata/topic.rb +0 -91
  420. data/lib/karafka/pro/routing/features/parallel_segments/builder.rb +0 -72
  421. data/lib/karafka/pro/routing/features/parallel_segments/config.rb +0 -52
  422. data/lib/karafka/pro/routing/features/parallel_segments/consumer_group.rb +0 -108
  423. data/lib/karafka/pro/routing/features/patterns/consumer_group.rb +0 -89
  424. data/lib/karafka/pro/routing/features/patterns/contracts/topic.rb +0 -56
  425. data/lib/karafka/pro/routing/features/patterns/detector.rb +0 -96
  426. data/lib/karafka/pro/routing/features/patterns/pattern.rb +0 -112
  427. data/lib/karafka/pro/routing/features/patterns/topic.rb +0 -76
  428. data/lib/karafka/pro/routing/features/patterns/topics.rb +0 -70
  429. data/lib/karafka/pro/routing/features/patterns.rb +0 -50
  430. data/lib/karafka/pro/routing/features/periodic_job/config.rb +0 -54
  431. data/lib/karafka/pro/routing/features/periodic_job/contracts/topic.rb +0 -59
  432. data/lib/karafka/pro/routing/features/periodic_job/topic.rb +0 -120
  433. data/lib/karafka/pro/routing/features/periodic_job.rb +0 -44
  434. data/lib/karafka/pro/routing/features/recurring_tasks/builder.rb +0 -148
  435. data/lib/karafka/pro/routing/features/recurring_tasks/config.rb +0 -45
  436. data/lib/karafka/pro/routing/features/recurring_tasks/topic.rb +0 -70
  437. data/lib/karafka/pro/routing/features/recurring_tasks.rb +0 -42
  438. data/lib/karafka/pro/routing/features/scheduled_messages/builder.rb +0 -152
  439. data/lib/karafka/pro/routing/features/scheduled_messages/config.rb +0 -45
  440. data/lib/karafka/pro/routing/features/scheduled_messages/contracts/topic.rb +0 -55
  441. data/lib/karafka/pro/routing/features/scheduled_messages/topic.rb +0 -70
  442. data/lib/karafka/pro/routing/features/swarm/contracts/routing.rb +0 -92
  443. data/lib/karafka/pro/routing/features/swarm/contracts/topic.rb +0 -93
  444. data/lib/karafka/pro/routing/features/swarm/topic.rb +0 -103
  445. data/lib/karafka/pro/routing/features/swarm.rb +0 -56
  446. data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +0 -67
  447. data/lib/karafka/pro/routing/features/virtual_partitions/contracts/topic.rb +0 -73
  448. data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +0 -99
  449. data/lib/karafka/pro/routing/features/virtual_partitions.rb +0 -44
  450. data/lib/karafka/processing/executor.rb +0 -216
  451. data/lib/karafka/processing/executors_buffer.rb +0 -90
  452. data/lib/karafka/processing/expansions_selector.rb +0 -22
  453. data/lib/karafka/processing/inline_insights/consumer.rb +0 -43
  454. data/lib/karafka/processing/inline_insights/listener.rb +0 -19
  455. data/lib/karafka/processing/inline_insights/tracker.rb +0 -129
  456. data/lib/karafka/processing/jobs/consume.rb +0 -47
  457. data/lib/karafka/processing/jobs/eofed.rb +0 -29
  458. data/lib/karafka/processing/jobs/idle.rb +0 -31
  459. data/lib/karafka/processing/jobs/revoked.rb +0 -29
  460. data/lib/karafka/processing/jobs/shutdown.rb +0 -30
  461. data/lib/karafka/processing/jobs_builder.rb +0 -34
  462. data/lib/karafka/processing/strategies/aj_dlq_mom.rb +0 -44
  463. data/lib/karafka/processing/strategies/aj_mom.rb +0 -21
  464. data/lib/karafka/processing/strategies/base.rb +0 -61
  465. data/lib/karafka/processing/strategies/default.rb +0 -214
  466. data/lib/karafka/processing/strategies/dlq.rb +0 -153
  467. data/lib/karafka/processing/strategies/dlq_mom.rb +0 -68
  468. data/lib/karafka/processing/strategies/mom.rb +0 -29
  469. data/lib/karafka/routing/features/active_job/builder.rb +0 -33
  470. data/lib/karafka/routing/features/active_job/config.rb +0 -15
  471. data/lib/karafka/routing/features/active_job/contracts/topic.rb +0 -42
  472. data/lib/karafka/routing/features/active_job/proxy.rb +0 -14
  473. data/lib/karafka/routing/features/active_job/topic.rb +0 -48
  474. data/lib/karafka/routing/features/active_job.rb +0 -13
  475. data/lib/karafka/routing/features/dead_letter_queue/config.rb +0 -37
  476. data/lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb +0 -56
  477. data/lib/karafka/routing/features/dead_letter_queue/topic.rb +0 -74
  478. data/lib/karafka/routing/features/dead_letter_queue.rb +0 -16
  479. data/lib/karafka/routing/features/declaratives/config.rb +0 -18
  480. data/lib/karafka/routing/features/eofed/config.rb +0 -15
  481. data/lib/karafka/routing/features/eofed/contracts/topic.rb +0 -37
  482. data/lib/karafka/routing/features/eofed/topic.rb +0 -40
  483. data/lib/karafka/routing/features/eofed.rb +0 -14
  484. data/lib/karafka/routing/features/inline_insights/config.rb +0 -15
  485. data/lib/karafka/routing/features/inline_insights/contracts/topic.rb +0 -25
  486. data/lib/karafka/routing/features/inline_insights/topic.rb +0 -40
  487. data/lib/karafka/routing/features/inline_insights.rb +0 -40
  488. data/lib/karafka/routing/features/manual_offset_management/config.rb +0 -15
  489. data/lib/karafka/routing/features/manual_offset_management/contracts/topic.rb +0 -25
  490. data/lib/karafka/routing/features/manual_offset_management/topic.rb +0 -44
  491. data/lib/karafka/routing/features/manual_offset_management.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 953c11ca73eda62bac76aaca94946b50b880a54e50756b0665da68155c9ad68d
4
- data.tar.gz: a5d200ac66bc102d6dac680aaa03df1cc897113dc2af52f4684f3f7128608340
3
+ metadata.gz: bc797708a61eca1cc0309dce91d05ab1dd623f3c7f6abfd74ac7af69c98f5254
4
+ data.tar.gz: 9e0e3bace7cc9f5393dfe788035ddc6e89cd64c8afd7ed5a2400d841cce95637
5
5
  SHA512:
6
- metadata.gz: 96d8087bda95065a1b56f5a525b9dd53c9ec71d01d9dd51f56403f7a14fd5ee406f2c40a366e1bb607495ebea8ce76ddd379df08e8e76594cdfae5905ff9c3d0
7
- data.tar.gz: 393f0264db679e7b71eeb2fe6c419090d6ff46a43354789fcef2e1e7e6baec3c839583982129669d02a6eae1d245396f48c0dcfebe475946ca2aa97dadce90ed
6
+ metadata.gz: 512bed7912b22916225f0428cf1ef949e534765eaca459606155e451566e847c3c0993a83978f230f72ac202e2d6e797415df4086ed00b37bfdbcdb94f5f4e06
7
+ data.tar.gz: f0152dec64b5ba30ebae473db2236848b6a3298473be0dec7956330e44e973593311a70e616eb68cc8705fdbcdf55a53eff1d54a230658a0307d7ba6b00cb413
data/CHANGELOG.md CHANGED
@@ -1,16 +1,75 @@
1
1
  # Karafka Framework Changelog
2
2
 
3
- ## 2.5.10 (Unreleased)
3
+ ## 2.6.0 (Unreleased)
4
+ - **[Feature]** Add `Karafka::Admin.read_partition_offsets` (and `Admin::Topics#read_partition_offsets`) exposing the `rd_kafka_ListOffsets` admin API to query partition offsets by spec (`:earliest`, `:latest`, `:max_timestamp`, or a timestamp in ms) without a consumer group. Accepts an optional `isolation_level:` keyword (pass `READ_COMMITTED` for the Last Stable Offset instead of the high-watermark, giving accurate lag on transactional topics).
5
+ - **[Feature]** Add `Karafka::Connection::Client#read_partition_offsets` (and `Connection::Proxy#read_partition_offsets`) exposing the batched `ListOffsets` query on a consumer's own connection, forwarding its `isolation.level`. Note that `:latest` resolves to the high watermark regardless of isolation level, so it includes uncommitted messages on topics with in-flight transactions.
6
+ - **[Feature]** Allow `Karafka::Admin` (and subsystems like `Admin::ConsumerGroups`, `Admin::Topics`) to operate on an external client via `Karafka::Admin.new(external_client: client)`. Reuses the caller's client (no per-call bootstrap); its lifecycle stays with its owner.
7
+ - **[Feature]** Add `Karafka::Admin::IsolationLevels` module with `READ_UNCOMMITTED` and `READ_COMMITTED` constants wrapping the underlying rdkafka integer constants.
8
+ - **[Feature]** Introduce standalone `Karafka::Declaratives` subsystem (`Declaratives::Topic`, `Declaratives::Repository`, `Declaratives::Builder`) decoupled from routing. Topics can be declared via `Karafka::App.declaratives.draw`; the existing `routing#config(...)` DSL keeps working as a backwards-compatible bridge.
4
9
  - **[Feature]** Add `Processing::WorkersPool` with dynamic thread pool scaling via `#scale`, `nil` sentinel-based worker exit for downscaling, and `worker.scaling.up`/`worker.scaling.down` instrumentation events.
10
+ - [Enhancement] Refresh watermark offsets and lags of long-paused partitions in `statistics.emitted` (Pro). Opt-in via `config.internal.statistics.consumer_groups.lag_compensation.interval` (ms, default `0` - disabled); partitions qualify after being paused for at least `lag_compensation.pause_age` (ms, min `5_000`, default `30_000`). Refreshed values are kept on resume until live statistics catch up, then dropped in bulk on the next rebalance.
11
+ - [Enhancement] Replace per-partition `query_watermark_offsets` calls with batched `list_offsets` in `Admin::Topics#read_watermark_offsets`, `Admin::ConsumerGroups#seek`, and `Pro::Iterator::TplBuilder#resolve_partitions_with_negative_offsets`, cutting N sequential roundtrips to a small constant and avoiding a dedicated admin client in the iterator path (Pro).
12
+ - [Enhancement] Add `stability_ttl` to `Kubernetes::LivenessListener` and `Pro::Swarm::LivenessListener` to detect consumers frozen in a single non-`"steady"` librdkafka `cgrp.join_state`. On breach, reports `stability_ttl_exceeded: true` (HTTP 500) / status code `4`; clears once the group returns to `"steady"`. Requires `statistics.interval.ms`; defaults to twice the max `max.poll.interval.ms` across active subscription groups.
13
+ - [Enhancement] Contain non-`StandardError` errors (`ScriptError`, `SystemStackError`, etc.) raised in the consumption flow through the normal retry/pause/DLQ flow instead of skipping the batch. Process-critical errors (`SystemExit`, `SignalException`, `NoMemoryError`) are recorded, keep the partition paused, and trigger a graceful shutdown via the auto-subscribed `Instrumentation::CriticalErrorsListener` instead of being retried or dispatched to the DLQ. Configurable via `config.internal.processing.critical_errors`.
14
+ - [Enhancement] Introduce polymorphic `Routing::Topic#group` and `Routing::SubscriptionGroup#group` accessors (`#consumer_group` kept as a backwards-compatible alias), expose `group_id` in `Routing::Topic#to_h`, and emit parallel `group`/`group_id` keys alongside the legacy `consumer_group`/`consumer_group_id` keys in `rebalance.*`, `error.occurred`, and `statistics.emitted` payloads. Prepares routing for KIP-932 share groups; legacy keys remain until Karafka 3.0.
15
+ - [Enhancement] Add `Pro::Processing::ConsumerGroups::Filters::Actions` as the single source of truth for filter post-execution actions (`Actions.skip`/`Actions.pause`/`Actions.seek` value methods, the `ALL` list, and `#skip?`/`#pause?`/`#seek?` predicates mixed into `Filters::Base` and `Coordinators::FiltersApplier`). Returned values remain the same plain symbols, so existing filters keep working (Pro).
16
+ - [Enhancement] Make the statistics decorator used by `Instrumentation::Callbacks::ConsumerGroups::Statistics` configurable via `config.internal.statistics.consumer_groups.decorator_class` instead of hardcoding `Karafka::Core::Monitoring::StatisticsDecorator`.
17
+ - [Enhancement] Declare recurring tasks and scheduled messages internal topics via the standalone `Karafka::App.declaratives.draw` DSL instead of the routing `config(...)` bridge; the resulting declarations are unchanged (Pro).
18
+ - [Enhancement] CLI topic commands (`create`, `delete`, `reset`, `repartition`, `align`, `migrate`, `plan`) now read from `Karafka::App.declaratives.topics` instead of walking the routing tree, so topics declared via `declaratives.draw` are managed without a routing entry.
5
19
  - [Enhancement] Add per-partition generation tracking to `AssignmentsTracker` to distinguish first-time assignments from reassignments.
6
20
  - [Enhancement] Make liveness listeners fiber-safe.
7
- - [Fix] Include orphaned node detection in Pro swarm liveness listener.
8
- - [Fix] Report liveness on `connection.listener.before_fetch_loop` so nodes send an initial healthy report before the first consumption.
9
- - [Fix] Fire liveness events during `wait_pinging` so nodes continue reporting health status during shutdown with active LRJ jobs.
21
+ - [Enhancement] Bump swarm supervisor `SHUTDOWN_GRACE_PERIOD` from 1s to 15s to give forked nodes enough time to finish post-`shutdown_timeout` cleanup before forceful termination.
22
+ - [Enhancement] Move consumer-group-specific `Processing` components (`Coordinator`, `CoordinatorsBuffer`, `Executor`, `ExecutorsBuffer`, `Partitioner`, `ExpansionsSelector`, `InlineInsights`) and their Pro equivalents under the `ConsumerGroups` namespace (internal). Related config defaults are updated; user-provided classes are unaffected.
23
+ - [Enhancement] Move processing strategies (`Processing::Strategies::*` and `Pro::Processing::Strategies::*`) under the `ConsumerGroups` namespace (internal), preparing for parallel `ShareGroups::Strategies` (KIP-932).
24
+ - [Enhancement] Move `Processing::StrategySelector` (OSS and Pro) under the `ConsumerGroups` namespace (internal); the `config.processing.strategy_selector` default is updated, user selectors unaffected.
25
+ - [Enhancement] Move `Karafka::Connection::RebalanceManager` to `Connection::ConsumerGroups::RebalanceManager` (internal).
26
+ - [Enhancement] Move the rebalance librdkafka callback to `Instrumentation::Callbacks::ConsumerGroups::Rebalance` (internal); event names and payloads unchanged.
27
+ - [Enhancement] Move `Instrumentation::Callbacks::Error` and `Callbacks::Statistics` under `Callbacks::ConsumerGroups` (internal), completing the callbacks-layer namespacing; event names and payloads unchanged.
28
+ - [Enhancement] Namespace consumer-group-specific processing job classes under `Processing::ConsumerGroups::Jobs` (OSS) and `Pro::Processing::ConsumerGroups::Jobs` (Pro); only `Jobs::Base` stays generic. Internal move, no public API changes.
29
+ - [Enhancement] Move `Processing::JobsBuilder` (OSS and Pro) under the `ConsumerGroups` namespace (internal).
30
+ - [Enhancement] Nest consumer-group-specific processing config settings (`coordinator_class`, `errors_tracker_class`, `partitioner_class`, `strategy_selector`, `expansions_selector`, `executor_class`, `jobs_builder`) under `config.internal.processing.consumer_groups`; shared settings stay at `config.internal.processing`.
31
+ - [Enhancement] Move OSS consumer-group-specific routing features (`ActiveJob`, `DeadLetterQueue`, `Eofed`, `InlineInsights`, `ManualOffsetManagement`) under `Routing::Features::ConsumerGroups` (internal); agnostic features stay put.
32
+ - [Enhancement] Move Pro consumer-group-specific routing features under `Pro::Routing::Features::ConsumerGroups` (internal); agnostic features (`Expiring`, `Filtering`, `Pausing`, `Throttling`) stay put.
33
+ - [Change] Require `karafka-rdkafka` `>= 0.28.0`, which exposes `Rdkafka::Consumer#list_offsets` and rebuilds `#lag` on top of it, so lag reads issue a single batched end-offsets query instead of one watermark roundtrip per partition.
34
+ - [Change] Require `karafka-rdkafka` `>= 0.27.1` for the `poll_batch`/`poll_batch_nb` fix that discarded topic/partition/offset context from `e.details`, causing `TopicNotFoundError` crashes on `partition_eof`.
35
+ - [Change] Remove the public `custom_kafka` reader from `Karafka::Admin` (internal collaboration detail, unused by any public API; custom kafka settings are provided at construction via `Karafka::Admin.new(kafka: ...)`).
36
+ - [Refactor] Remove the unused `@mutex` from `Pro::Connection::Manager` (dead since #1851 replaced lock-based `@changes` eviction with key preloading; the lock-free threading model is now documented) (Pro).
37
+ - [Maintenance] Split declarative topic configuration from routing in the integration suite: add a `draw_topics` spec helper wrapping `Karafka::App.declaratives.draw`, source spec topic creation from the declaratives repository, and migrate general integration specs to declare partitions/config via `draw_topics`.
38
+ - [Maintenance] Replace manual per-version `Warning[:performance]`/`Warning[:deprecated]` spec setup with a dynamic `Warning.categories`-based approach that enables all non-experimental warning categories automatically.
10
39
  - [Maintenance] Use namespaced topic naming format in all integration specs for consistent traceability.
11
- - [Fix] Fix `DataCollector::SPEC_HASH` producing non-deterministic hashes for pristine and poro specs by passing the original spec path via `KARAFKA_SPEC_PATH` env var.
12
40
  - [Maintenance] Add `bin/tests_topics_hashes` script for looking up spec files by their topic name hash prefix.
13
- - [Change] Require `karafka-rdkafka` `>=` `0.26.1` to support upcoming features relying on low-level Rdkafka APIs.
41
+ - [Maintenance] Fix flaky `pro/admin/recovery/coordinator_for_spec.rb` by warming up the `__consumer_offsets` topic and retrying the first `Recovery.coordinator_for` call with exponential backoff on `MetadataError`.
42
+ - [Fix] Compare recurring task schedule versions with `Gem::Version` instead of as strings, so multi-segment upgrades like `1.9.0` → `1.10.0` are no longer misread as downgrades and rejected with `IncompatibleScheduleError` (Pro).
43
+ - [Fix] Fix dynamic multiplexing `scale_delay` being applied globally instead of per subscription-group family (`Pro::Connection::Manager#stable?` memoized the first family's value for all); it is now read per family on every check (Pro).
44
+ - [Fix] Make `Routing::Topics#<<` copy-on-write so a topic discovered at runtime by a pattern subscription can no longer be observed mid-append by a concurrent reader (e.g. `Router#find_by` from a `Pro::Iterator` or `Admin` call on another thread).
45
+ - [Fix] Bound `Instrumentation::AssignmentsTracker`'s `@generations` map (`GENERATIONS_TOPICS_LIMIT`, LRU eviction) so it no longer grows for the whole process lifetime under regex pattern subscriptions; static topologies are unaffected.
46
+ - [Fix] Derive the filtering pause timeout only from filters that actually want to pause, so a coexisting `:seek` filter reporting a `0` timeout no longer collapses a `:pause` to `0` and busy-spins (Pro).
47
+ - [Fix] Clamp scheduled message CreateTime to the wall clock in the loaded heuristic, so a single future-dated message can no longer be taken as proof of catch-up and cause double dispatch of not-yet-loaded cancellations (Pro).
48
+ - [Fix] Reset `Pro::Iterator#each` EOF/stop tracking in an `ensure`, so breaking out of the yielded block no longer leaves `done?` immediately true and silently drops a fresh backlog on reuse (Pro).
49
+ - [Fix] Fix the `parallel_segments` CLI commands (`distribute`, `collapse`, `reset`) silently skipping groups when more than one was requested via `--groups` (the matched group was deleted from the array being iterated); all requested groups are now processed (Pro).
50
+ - [Fix] Evict a partition's samples from `Pro::Instrumentation::PerformanceTracker` on revoke and scope samples by subscription group id, fixing unbounded growth and cross-group interference. **Breaking (internal API):** `processing_time_p95` now takes the subscription group id first (`processing_time_p95(group_id, topic, partition)`) (Pro).
51
+ - [Fix] Fall back to the current offset metadata (instead of raising `KeyError`) in Virtual Partitions `VirtualOffsetManager#markable` under the `:exact` strategy when the lowest-offset virtual-partition group is left unmarked (Pro).
52
+ - [Fix] Leave tombstone records (key with a `nil` payload) untouched on produce and consume instead of crashing in `cipher.encrypt`/`decrypt`, so they remain valid tombstones for log compaction (Pro).
53
+ - [Fix] Recompute the `Pro::Processing::JobsQueue#clear` async-locking fast-path flag from the remaining groups' locks instead of forcing it off globally, so another subscription group's active `lock_async` locks are no longer ignored (Pro).
54
+ - [Fix] Reset the per-partition retry attempt counter on revocation, so a message reclaimed after a rebalance is no longer treated as having exhausted its retries and dispatched to the DLQ early.
55
+ - [Fix] Reset ActiveJob `CurrentAttributes` in an `ensure`, so a failed job's attributes no longer leak into the next job on the same worker.
56
+ - [Fix] Return `false` from `#mark_as_consumed`, `#mark_as_consumed!`, and `#commit_offsets!` when the operation fails because the partition was lost (previously could return `true`).
57
+ - [Fix] Reset `seek_offset` only after a `#seek` succeeds, so a raising seek (e.g. an unresolvable time-based offset) no longer pauses without seeking back and skips the rest of the batch.
58
+ - [Fix] Skip DLQ dispatch when the partition was revoked mid-job in the ActiveJob + DLQ + long-running job strategies (matching the non-AJ LRJ strategies), so the new owner handles it instead of producing a duplicate (Pro).
59
+ - [Fix] Advance the in-memory `seek_offset` only after a transactional DLQ dispatch succeeds, so an aborted dispatch transaction with `mark_after_dispatch: false` no longer skips the broken message (Pro).
60
+ - [Fix] Report ownership truthfully from Virtual Partitions `#mark_as_consumed`/`#mark_as_consumed!` when there is no real offset to materialize yet (previously inverted) (Pro).
61
+ - [Fix] Stop reverting recurring task commands consumed during the boot replay phase, which previously persisted the reverted state and lost the command permanently (Pro).
62
+ - [Fix] Always precede Virtual Partitions DLQ `:dispatch`/`:skip` decisions with a collapsed retry, so they run on the linear deterministic flow instead of an arbitrary virtual-partition subset that could lose messages or dispatch the wrong one (Pro).
63
+ - [Fix] Compare scheduled messages schema versions as `Gem::Version` instead of strings, fixing mis-evaluation once a version segment reaches two digits (Pro).
64
+ - [Fix] Fix `Karafka::Admin.read_topic` with a `Time` start offset beyond the last message returning the newest messages instead of none.
65
+ - [Fix] Prevent silent worker thread death draining the workers pool: worker continuation is now an explicit framework decision (only a closed queue or downscale sentinel stops a worker), so a user `Consumer#wrap` returning a falsy value no longer kills the thread.
66
+ - [Fix] Track `Pro::Iterator` EOF and explicit stops per topic-partition instead of globally, so a partition receiving new data mid-iteration no longer exhausts the EOF budget and terminates `#each` while others still have backlog; `#each` also resets `#stop` on finish so the iterator can be reused (Pro).
67
+ - [Fix] Include orphaned node detection in the Pro swarm liveness listener.
68
+ - [Fix] Report liveness on `connection.listener.before_fetch_loop` so nodes send an initial healthy report before the first consumption.
69
+ - [Fix] Fire liveness events during `wait_pinging` so nodes keep reporting health during shutdown with active LRJ jobs.
70
+ - [Fix] Fix `DataCollector::SPEC_HASH` producing non-deterministic hashes for pristine and poro specs by passing the original spec path via the `KARAFKA_SPEC_PATH` env var.
71
+ - [Fix] Fix the swarm supervisor leaking reader pipe file descriptors on node restarts by closing the old reader before creating a new pipe in `Node#start`.
72
+ - [Fix] Raise `InvalidLicenseTokenError` when a manually-defined `Karafka::License` module is missing `#token` or `#version` instead of silently skipping Pro loading and raising a confusing `NameError` later in boot.
14
73
 
15
74
  ## 2.5.9 (2026-03-30)
16
75
  - [Enhancement] Validate that `statistics.interval.ms` is not zero when dynamic multiplexing is enabled (Pro).
data/certs/expired.txt CHANGED
@@ -19,6 +19,7 @@
19
19
  39aeae710122bf14729a05f24f5bd702d2a1127e5c7fb9bd90de0e20890575dc
20
20
  3ada575caaf0b8bdeca0686a93074de9ed830751e6f46251849475f70e84e408
21
21
  4367e57ca36a4b447f23745d76611514df61b56611225be4c8f9a90560bbace9
22
+ 4611be91c816b50c54e7e4ec422e02363bc5450f9107a35d7e915d949ccf7bdb
22
23
  47380207ca3041b14c7d4c81a69f820852069ecab4d80a068d39133f61a6e641
23
24
  4d49b497ece81604358afc8e9adc7d1163995c4c08446bcd5c0bbfe3d7ebc1e7
24
25
  4d97c95c46e51105705964aecbfa5219120295e7d0a172f5c098d12c3a5cbf7e
@@ -62,6 +63,7 @@ bf6c5c58b02fa5e7c7dc845213ad943c5b6613f12ac6012be00b1484bb85aa04
62
63
  c011c3d168a159c135ef35bf55121edaf1a4cc94f663a1f461595776b0313160
63
64
  c311cb6cfb38a8b2e83b3080c1f87444a52f3f645be8337559a123aaacf1344a
64
65
  c87222a94f98c3a2191dda9254bd6ed031fd8ca190f75b40c67a0fcd4b56f795
66
+ c9a5cc3f4c0fc7cb8784978d1f5185340ab585baf3b5d94300a29b212310871b
65
67
  ca53af70cd7e67abbb9dbf0a8da6788a9b2192aa3a5a1dd8720aaa68a2511722
66
68
  d02da0cbd2c1d83432a2cee7984dd311249692373554002d1d543dd5007f6a58
67
69
  d13295e597120b88bf4c4f36de63d0aa3e5a68e3578c09a2e026bd1f6aaaf04f
@@ -34,16 +34,21 @@ en:
34
34
 
35
35
  oauth.token_provider_listener_format: 'must be false or respond to #on_oauthbearer_token_refresh'
36
36
 
37
- internal.processing.jobs_builder_format: cannot be nil
38
37
  internal.processing.jobs_queue_class_format: cannot be nil
39
38
  internal.processing.scheduler_class_format: cannot be nil
40
- internal.processing.coordinator_class_format: cannot be nil
41
- internal.processing.partitioner_class_format: cannot be nil
42
- internal.processing.strategy_selector_format: cannot be nil
43
- internal.processing.expansions_selector_format: cannot be nil
44
- internal.processing.executor_class_format: cannot be nil
45
39
  internal.processing.worker_job_call_wrapper_format: 'needs to be false or respond to #wrap'
46
- internal.processing.errors_tracker_class_format: 'needs to be nil or a class'
40
+ internal.processing.critical_errors_format: 'needs to be an array of Exception subclasses'
41
+ internal.processing.consumer_groups.jobs_builder_format: cannot be nil
42
+ internal.processing.consumer_groups.coordinator_class_format: cannot be nil
43
+ internal.processing.consumer_groups.errors_tracker_class_format: 'needs to be nil or a class'
44
+ internal.processing.consumer_groups.partitioner_class_format: cannot be nil
45
+ internal.processing.consumer_groups.strategy_selector_format: cannot be nil
46
+ internal.processing.consumer_groups.expansions_selector_format: cannot be nil
47
+ internal.processing.consumer_groups.executor_class_format: cannot be nil
48
+
49
+ internal.statistics.consumer_groups.decorator_class_format: cannot be nil
50
+ internal.statistics.consumer_groups.lag_compensation.interval_format: needs to be an Integer greater or equal to 0
51
+ internal.statistics.consumer_groups.lag_compensation.pause_age_format: needs to be an Integer greater or equal to 5000
47
52
 
48
53
  internal.active_job.dispatcher_format: cannot be nil
49
54
  internal.active_job.job_options_contract_format: cannot be nil
@@ -176,6 +181,13 @@ en:
176
181
  all topic names within a single consumer group must be unique considering namespacing styles
177
182
  disable this validation by setting config.strict_topics_namespacing to false
178
183
 
184
+ declaratives:
185
+ topic:
186
+ declaratives.partitions_format: needs to be more or equal to 1
187
+ declaratives.active_format: needs to be either true or false
188
+ declaratives.replication_factor_format: needs to be more or equal to 1
189
+ declaratives.details_format: needs to be a hash with only symbol keys
190
+
179
191
  job_options:
180
192
  missing: needs to be present
181
193
  dispatch_method_format: needs to be either :produce_async or :produce_sync
data/karafka.gemspec CHANGED
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
21
21
  without having to focus on things that are not your business domain.
22
22
  DESC
23
23
 
24
- spec.add_dependency "karafka-core", ">= 2.5.13", "< 2.6.0"
25
- spec.add_dependency "karafka-rdkafka", ">= 0.26.1"
26
- spec.add_dependency "waterdrop", ">= 2.8.14", "< 3.0.0"
24
+ spec.add_dependency "karafka-core", ">= 2.6.0", "< 2.7.0"
25
+ spec.add_dependency "karafka-rdkafka", ">= 0.28.0"
26
+ spec.add_dependency "waterdrop", ">= 2.10.1", "< 3.0.0"
27
27
  spec.add_dependency "zeitwerk", "~> 2.3"
28
28
 
29
29
  spec.required_ruby_version = ">= 3.2.0"
@@ -20,7 +20,7 @@ module ActiveJob
20
20
  # - Other Rails versions: Inherit from AbstractAdapter (normal behavior)
21
21
  # - No Rails: Inherit from Object (standalone ActiveJob usage)
22
22
  #
23
- # @see https://github.com/sidekiq/sidekiq/issues/6746 Similar issue in Sidekiq
23
+ # See https://github.com/sidekiq/sidekiq/issues/6746 Similar issue in Sidekiq
24
24
  base = if defined?(Rails::VERSION)
25
25
  ((Rails::VERSION::MAJOR == 7 && Rails::VERSION::MINOR < 2) ? Object : AbstractAdapter)
26
26
  else
@@ -28,8 +28,7 @@ module ActiveJob
28
28
  Object
29
29
  end
30
30
 
31
- # Karafka adapter for enqueuing jobs
32
- # This is here for ease of integration with ActiveJob.
31
+ # Karafka adapter for enqueuing jobs This is here for ease of integration with ActiveJob.
33
32
  class KarafkaAdapter < base
34
33
  include ::Karafka::Helpers::ConfigImporter.new(
35
34
  dispatcher: %i[internal active_job dispatcher]
@@ -26,7 +26,7 @@ module Karafka
26
26
  end
27
27
 
28
28
  yield(job)
29
-
29
+ ensure
30
30
  resetable.each(&:reset)
31
31
  end
32
32
  end
@@ -5,11 +5,13 @@ require_relative "current_attributes/job_wrapper"
5
5
  require_relative "current_attributes/loading"
6
6
  require_relative "current_attributes/persistence"
7
7
 
8
- # This code is based on Sidekiqs approach to persisting current attributes
9
- # @see https://github.com/sidekiq/sidekiq/blob/main/lib/sidekiq/middleware/current_attributes.rb
10
8
  module Karafka
11
9
  module ActiveJob
12
10
  # Module that allows to persist current attributes on Karafka jobs
11
+ #
12
+ # This code is based on Sidekiqs approach to persisting current attributes
13
+ #
14
+ # @see https://github.com/sidekiq/sidekiq/blob/main/lib/sidekiq/middleware/current_attributes.rb
13
15
  module CurrentAttributes
14
16
  # Allows for persistence of given current attributes via AJ + Karafka
15
17
  #
@@ -8,8 +8,7 @@ module Karafka
8
8
  deserializer: %i[internal active_job deserializer]
9
9
  )
10
10
 
11
- # Defaults for dispatching
12
- # The can be updated by using `#karafka_options` on the job
11
+ # Defaults for dispatching. They can be updated by using `#karafka_options` on the job
13
12
  DEFAULTS = {
14
13
  dispatch_method: :produce_async,
15
14
  dispatch_many_method: :produce_many_async
@@ -19,8 +19,7 @@ module Karafka
19
19
  def karafka_options(new_options = {})
20
20
  return _karafka_options if new_options.empty?
21
21
 
22
- # Make sure, that karafka options that someone wants to use are valid before assigning
23
- # them
22
+ # Make sure, that karafka options that someone wants to use are valid before assigning them
24
23
  App.config.internal.active_job.job_options_contract.validate!(
25
24
  new_options,
26
25
  scope: %w[active_job]
@@ -76,8 +76,7 @@ module Karafka
76
76
 
77
77
  private
78
78
 
79
- # Recognizes whether the type is provided and remaps it to a symbol representation if
80
- # needed
79
+ # Recognizes whether the type is provided and remaps it to a symbol representation if needed
81
80
  #
82
81
  # @param type [Symbol, Integer]
83
82
  # @return [Symbol]