@platformatic/rdkafka 4.0.0

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 (767) hide show
  1. package/.editorconfig +5 -0
  2. package/.jshintignore +1 -0
  3. package/.jshintrc +23 -0
  4. package/CONTRIBUTING.md +237 -0
  5. package/LICENSE.txt +21 -0
  6. package/Makefile +94 -0
  7. package/README.md +630 -0
  8. package/bench/consumer-raw-rdkafka.js +76 -0
  9. package/bench/consumer-subscribe.js +77 -0
  10. package/bench/kafka-consumer-stream.js +100 -0
  11. package/bench/producer-raw-rdkafka.js +125 -0
  12. package/bench/producer-rdkafka.js +117 -0
  13. package/bench/seed.sh +38 -0
  14. package/binding.gyp +155 -0
  15. package/ci/checks/librdkafka-correct-version.js +67 -0
  16. package/ci/checks/librdkafka-exists.js +13 -0
  17. package/ci/librdkafka-defs-generator.js +193 -0
  18. package/ci/prepublish.js +3 -0
  19. package/config.d.ts +1132 -0
  20. package/configure +15 -0
  21. package/cpplint.py +6325 -0
  22. package/deploy.enc +0 -0
  23. package/deps/librdkafka/.clang-format +136 -0
  24. package/deps/librdkafka/.clang-format-cpp +103 -0
  25. package/deps/librdkafka/.dir-locals.el +10 -0
  26. package/deps/librdkafka/.formatignore +33 -0
  27. package/deps/librdkafka/.gdbmacros +19 -0
  28. package/deps/librdkafka/.semaphore/project.yml +43 -0
  29. package/deps/librdkafka/.semaphore/project_public.yml +20 -0
  30. package/deps/librdkafka/.semaphore/semaphore.yml +355 -0
  31. package/deps/librdkafka/CHANGELOG.md +1738 -0
  32. package/deps/librdkafka/CMakeLists.txt +291 -0
  33. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  34. package/deps/librdkafka/CONFIGURATION.md +189 -0
  35. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  36. package/deps/librdkafka/Doxyfile +2375 -0
  37. package/deps/librdkafka/INTRODUCTION.md +2173 -0
  38. package/deps/librdkafka/LICENSE +26 -0
  39. package/deps/librdkafka/LICENSE.cjson +22 -0
  40. package/deps/librdkafka/LICENSE.crc32c +28 -0
  41. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  42. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  43. package/deps/librdkafka/LICENSE.lz4 +26 -0
  44. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  45. package/deps/librdkafka/LICENSE.nanopb +22 -0
  46. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  47. package/deps/librdkafka/LICENSE.pycrc +23 -0
  48. package/deps/librdkafka/LICENSE.queue +31 -0
  49. package/deps/librdkafka/LICENSE.regexp +5 -0
  50. package/deps/librdkafka/LICENSE.snappy +36 -0
  51. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  52. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  53. package/deps/librdkafka/LICENSES.txt +625 -0
  54. package/deps/librdkafka/Makefile +124 -0
  55. package/deps/librdkafka/README.md +199 -0
  56. package/deps/librdkafka/README.win32 +26 -0
  57. package/deps/librdkafka/STATISTICS.md +624 -0
  58. package/deps/librdkafka/configure +214 -0
  59. package/deps/librdkafka/configure.self +331 -0
  60. package/deps/librdkafka/debian/changelog +111 -0
  61. package/deps/librdkafka/debian/compat +1 -0
  62. package/deps/librdkafka/debian/control +71 -0
  63. package/deps/librdkafka/debian/copyright +99 -0
  64. package/deps/librdkafka/debian/gbp.conf +9 -0
  65. package/deps/librdkafka/debian/librdkafka++1.install +1 -0
  66. package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
  67. package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
  68. package/deps/librdkafka/debian/librdkafka1.docs +5 -0
  69. package/deps/librdkafka/debian/librdkafka1.install +1 -0
  70. package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
  71. package/deps/librdkafka/debian/rules +19 -0
  72. package/deps/librdkafka/debian/source/format +1 -0
  73. package/deps/librdkafka/debian/watch +2 -0
  74. package/deps/librdkafka/dev-conf.sh +123 -0
  75. package/deps/librdkafka/examples/CMakeLists.txt +79 -0
  76. package/deps/librdkafka/examples/Makefile +167 -0
  77. package/deps/librdkafka/examples/README.md +42 -0
  78. package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
  79. package/deps/librdkafka/examples/consumer.c +261 -0
  80. package/deps/librdkafka/examples/delete_records.c +233 -0
  81. package/deps/librdkafka/examples/describe_cluster.c +322 -0
  82. package/deps/librdkafka/examples/describe_consumer_groups.c +436 -0
  83. package/deps/librdkafka/examples/describe_topics.c +427 -0
  84. package/deps/librdkafka/examples/elect_leaders.c +317 -0
  85. package/deps/librdkafka/examples/globals.json +11 -0
  86. package/deps/librdkafka/examples/idempotent_producer.c +344 -0
  87. package/deps/librdkafka/examples/incremental_alter_configs.c +348 -0
  88. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +961 -0
  89. package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
  90. package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
  91. package/deps/librdkafka/examples/list_offsets.c +327 -0
  92. package/deps/librdkafka/examples/misc.c +287 -0
  93. package/deps/librdkafka/examples/openssl_engine_example.cpp +249 -0
  94. package/deps/librdkafka/examples/producer.c +251 -0
  95. package/deps/librdkafka/examples/producer.cpp +228 -0
  96. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
  97. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
  98. package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
  99. package/deps/librdkafka/examples/rdkafka_example.c +853 -0
  100. package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
  101. package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
  102. package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
  103. package/deps/librdkafka/examples/transactions.c +665 -0
  104. package/deps/librdkafka/examples/user_scram.c +492 -0
  105. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +395 -0
  106. package/deps/librdkafka/lds-gen.py +73 -0
  107. package/deps/librdkafka/mainpage.doxy +40 -0
  108. package/deps/librdkafka/mklove/Makefile.base +329 -0
  109. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  110. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  111. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  112. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  113. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  114. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  115. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  116. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  117. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  118. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  119. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  120. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  121. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  122. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  123. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  124. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  125. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  126. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  127. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  128. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  129. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  130. package/deps/librdkafka/packaging/RELEASE.md +311 -0
  131. package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
  132. package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
  133. package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
  134. package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
  135. package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
  136. package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
  137. package/deps/librdkafka/packaging/cmake/README.md +38 -0
  138. package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
  139. package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
  140. package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
  141. package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
  142. package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
  143. package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
  144. package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
  145. package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
  146. package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
  147. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
  148. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
  149. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
  150. package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
  151. package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
  152. package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
  153. package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
  154. package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
  155. package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
  156. package/deps/librdkafka/packaging/cp/README.md +13 -0
  157. package/deps/librdkafka/packaging/cp/check_features.c +64 -0
  158. package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
  159. package/deps/librdkafka/packaging/cp/verify-packages.sh +48 -0
  160. package/deps/librdkafka/packaging/cp/verify-rpm.sh +39 -0
  161. package/deps/librdkafka/packaging/debian/changelog +66 -0
  162. package/deps/librdkafka/packaging/debian/compat +1 -0
  163. package/deps/librdkafka/packaging/debian/control +49 -0
  164. package/deps/librdkafka/packaging/debian/copyright +84 -0
  165. package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
  166. package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
  167. package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
  168. package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
  169. package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
  170. package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
  171. package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
  172. package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
  173. package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
  174. package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
  175. package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
  176. package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
  177. package/deps/librdkafka/packaging/debian/rules +19 -0
  178. package/deps/librdkafka/packaging/debian/source/format +1 -0
  179. package/deps/librdkafka/packaging/debian/watch +2 -0
  180. package/deps/librdkafka/packaging/get_version.py +21 -0
  181. package/deps/librdkafka/packaging/homebrew/README.md +15 -0
  182. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
  183. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
  184. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
  185. package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
  186. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
  187. package/deps/librdkafka/packaging/mingw-w64/travis-before-install.sh +20 -0
  188. package/deps/librdkafka/packaging/nuget/README.md +84 -0
  189. package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
  190. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
  191. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
  192. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
  193. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
  194. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
  195. package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
  196. package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
  197. package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
  198. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
  199. package/deps/librdkafka/packaging/nuget/release.py +167 -0
  200. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
  201. package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
  202. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
  203. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
  204. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
  205. package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
  206. package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
  207. package/deps/librdkafka/packaging/rpm/Makefile +92 -0
  208. package/deps/librdkafka/packaging/rpm/README.md +23 -0
  209. package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
  210. package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
  211. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
  212. package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
  213. package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
  214. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
  215. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
  216. package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
  217. package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
  218. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +10 -0
  219. package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
  220. package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
  221. package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
  222. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
  223. package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
  224. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
  225. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
  226. package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
  227. package/deps/librdkafka/packaging/tools/style-format.sh +148 -0
  228. package/deps/librdkafka/service.yml +18 -0
  229. package/deps/librdkafka/src/CMakeLists.txt +374 -0
  230. package/deps/librdkafka/src/Makefile +103 -0
  231. package/deps/librdkafka/src/README.lz4.md +30 -0
  232. package/deps/librdkafka/src/cJSON.c +2834 -0
  233. package/deps/librdkafka/src/cJSON.h +398 -0
  234. package/deps/librdkafka/src/crc32c.c +430 -0
  235. package/deps/librdkafka/src/crc32c.h +38 -0
  236. package/deps/librdkafka/src/generate_proto.sh +66 -0
  237. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  238. package/deps/librdkafka/src/lz4.c +2727 -0
  239. package/deps/librdkafka/src/lz4.h +842 -0
  240. package/deps/librdkafka/src/lz4frame.c +2078 -0
  241. package/deps/librdkafka/src/lz4frame.h +692 -0
  242. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  243. package/deps/librdkafka/src/lz4hc.c +1631 -0
  244. package/deps/librdkafka/src/lz4hc.h +413 -0
  245. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  246. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  247. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  248. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  249. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  250. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  251. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  252. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  253. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  254. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  255. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  256. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  257. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  258. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  259. package/deps/librdkafka/src/queue.h +850 -0
  260. package/deps/librdkafka/src/rd.h +441 -0
  261. package/deps/librdkafka/src/rdaddr.c +255 -0
  262. package/deps/librdkafka/src/rdaddr.h +203 -0
  263. package/deps/librdkafka/src/rdatomic.h +226 -0
  264. package/deps/librdkafka/src/rdavg.h +259 -0
  265. package/deps/librdkafka/src/rdavl.c +210 -0
  266. package/deps/librdkafka/src/rdavl.h +250 -0
  267. package/deps/librdkafka/src/rdbase64.c +169 -0
  268. package/deps/librdkafka/src/rdbase64.h +41 -0
  269. package/deps/librdkafka/src/rdbuf.c +1884 -0
  270. package/deps/librdkafka/src/rdbuf.h +375 -0
  271. package/deps/librdkafka/src/rdcrc32.c +114 -0
  272. package/deps/librdkafka/src/rdcrc32.h +170 -0
  273. package/deps/librdkafka/src/rddl.c +179 -0
  274. package/deps/librdkafka/src/rddl.h +43 -0
  275. package/deps/librdkafka/src/rdendian.h +174 -0
  276. package/deps/librdkafka/src/rdfloat.h +67 -0
  277. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  278. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  279. package/deps/librdkafka/src/rdgz.c +120 -0
  280. package/deps/librdkafka/src/rdgz.h +46 -0
  281. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  282. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  283. package/deps/librdkafka/src/rdhttp.c +512 -0
  284. package/deps/librdkafka/src/rdhttp.h +83 -0
  285. package/deps/librdkafka/src/rdinterval.h +177 -0
  286. package/deps/librdkafka/src/rdkafka.c +5351 -0
  287. package/deps/librdkafka/src/rdkafka.h +10603 -0
  288. package/deps/librdkafka/src/rdkafka_admin.c +9417 -0
  289. package/deps/librdkafka/src/rdkafka_admin.h +619 -0
  290. package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
  291. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  292. package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
  293. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  294. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  295. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  296. package/deps/librdkafka/src/rdkafka_background.c +221 -0
  297. package/deps/librdkafka/src/rdkafka_broker.c +6186 -0
  298. package/deps/librdkafka/src/rdkafka_broker.h +686 -0
  299. package/deps/librdkafka/src/rdkafka_buf.c +540 -0
  300. package/deps/librdkafka/src/rdkafka_buf.h +1524 -0
  301. package/deps/librdkafka/src/rdkafka_cert.c +552 -0
  302. package/deps/librdkafka/src/rdkafka_cert.h +61 -0
  303. package/deps/librdkafka/src/rdkafka_cgrp.c +7262 -0
  304. package/deps/librdkafka/src/rdkafka_cgrp.h +443 -0
  305. package/deps/librdkafka/src/rdkafka_conf.c +4456 -0
  306. package/deps/librdkafka/src/rdkafka_conf.h +668 -0
  307. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  308. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  309. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  310. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  311. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  312. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  313. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  314. package/deps/librdkafka/src/rdkafka_feature.c +461 -0
  315. package/deps/librdkafka/src/rdkafka_feature.h +102 -0
  316. package/deps/librdkafka/src/rdkafka_fetcher.c +1402 -0
  317. package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
  318. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  319. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  320. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  321. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  322. package/deps/librdkafka/src/rdkafka_int.h +1222 -0
  323. package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
  324. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  325. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  326. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  327. package/deps/librdkafka/src/rdkafka_metadata.c +2124 -0
  328. package/deps/librdkafka/src/rdkafka_metadata.h +341 -0
  329. package/deps/librdkafka/src/rdkafka_metadata_cache.c +977 -0
  330. package/deps/librdkafka/src/rdkafka_mock.c +2885 -0
  331. package/deps/librdkafka/src/rdkafka_mock.h +491 -0
  332. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +710 -0
  333. package/deps/librdkafka/src/rdkafka_mock_handlers.c +2817 -0
  334. package/deps/librdkafka/src/rdkafka_mock_int.h +591 -0
  335. package/deps/librdkafka/src/rdkafka_msg.c +2573 -0
  336. package/deps/librdkafka/src/rdkafka_msg.h +614 -0
  337. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  338. package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
  339. package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
  340. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1470 -0
  341. package/deps/librdkafka/src/rdkafka_offset.c +1537 -0
  342. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  343. package/deps/librdkafka/src/rdkafka_op.c +997 -0
  344. package/deps/librdkafka/src/rdkafka_op.h +834 -0
  345. package/deps/librdkafka/src/rdkafka_partition.c +4801 -0
  346. package/deps/librdkafka/src/rdkafka_partition.h +1173 -0
  347. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  348. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  349. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  350. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  351. package/deps/librdkafka/src/rdkafka_proto.h +733 -0
  352. package/deps/librdkafka/src/rdkafka_protocol.h +127 -0
  353. package/deps/librdkafka/src/rdkafka_queue.c +1153 -0
  354. package/deps/librdkafka/src/rdkafka_queue.h +1201 -0
  355. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  356. package/deps/librdkafka/src/rdkafka_request.c +6817 -0
  357. package/deps/librdkafka/src/rdkafka_request.h +709 -0
  358. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  359. package/deps/librdkafka/src/rdkafka_sasl.c +528 -0
  360. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  361. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  362. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  363. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1829 -0
  364. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  365. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +589 -0
  366. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +37 -0
  367. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  368. package/deps/librdkafka/src/rdkafka_sasl_scram.c +857 -0
  369. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  370. package/deps/librdkafka/src/rdkafka_ssl.c +1904 -0
  371. package/deps/librdkafka/src/rdkafka_ssl.h +64 -0
  372. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4781 -0
  373. package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
  374. package/deps/librdkafka/src/rdkafka_telemetry.c +703 -0
  375. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  376. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
  377. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  378. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +993 -0
  379. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
  380. package/deps/librdkafka/src/rdkafka_timer.c +402 -0
  381. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  382. package/deps/librdkafka/src/rdkafka_topic.c +2078 -0
  383. package/deps/librdkafka/src/rdkafka_topic.h +328 -0
  384. package/deps/librdkafka/src/rdkafka_transport.c +1297 -0
  385. package/deps/librdkafka/src/rdkafka_transport.h +94 -0
  386. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  387. package/deps/librdkafka/src/rdkafka_txnmgr.c +3251 -0
  388. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  389. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  390. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  391. package/deps/librdkafka/src/rdlist.c +576 -0
  392. package/deps/librdkafka/src/rdlist.h +434 -0
  393. package/deps/librdkafka/src/rdlog.c +89 -0
  394. package/deps/librdkafka/src/rdlog.h +41 -0
  395. package/deps/librdkafka/src/rdmap.c +503 -0
  396. package/deps/librdkafka/src/rdmap.h +492 -0
  397. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  398. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  399. package/deps/librdkafka/src/rdports.c +61 -0
  400. package/deps/librdkafka/src/rdports.h +38 -0
  401. package/deps/librdkafka/src/rdposix.h +250 -0
  402. package/deps/librdkafka/src/rdrand.c +70 -0
  403. package/deps/librdkafka/src/rdrand.h +43 -0
  404. package/deps/librdkafka/src/rdregex.c +156 -0
  405. package/deps/librdkafka/src/rdregex.h +43 -0
  406. package/deps/librdkafka/src/rdsignal.h +57 -0
  407. package/deps/librdkafka/src/rdstring.c +645 -0
  408. package/deps/librdkafka/src/rdstring.h +98 -0
  409. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  410. package/deps/librdkafka/src/rdtime.h +325 -0
  411. package/deps/librdkafka/src/rdtypes.h +86 -0
  412. package/deps/librdkafka/src/rdunittest.c +532 -0
  413. package/deps/librdkafka/src/rdunittest.h +230 -0
  414. package/deps/librdkafka/src/rdvarint.c +134 -0
  415. package/deps/librdkafka/src/rdvarint.h +165 -0
  416. package/deps/librdkafka/src/rdwin32.h +382 -0
  417. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  418. package/deps/librdkafka/src/rdxxhash.h +328 -0
  419. package/deps/librdkafka/src/regexp.c +1347 -0
  420. package/deps/librdkafka/src/regexp.h +41 -0
  421. package/deps/librdkafka/src/snappy.c +1866 -0
  422. package/deps/librdkafka/src/snappy.h +62 -0
  423. package/deps/librdkafka/src/snappy_compat.h +138 -0
  424. package/deps/librdkafka/src/statistics_schema.json +444 -0
  425. package/deps/librdkafka/src/tinycthread.c +932 -0
  426. package/deps/librdkafka/src/tinycthread.h +503 -0
  427. package/deps/librdkafka/src/tinycthread_extra.c +175 -0
  428. package/deps/librdkafka/src/tinycthread_extra.h +208 -0
  429. package/deps/librdkafka/src/win32_config.h +58 -0
  430. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  431. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  432. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  433. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  434. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  435. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  436. package/deps/librdkafka/src-cpp/Makefile +55 -0
  437. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  438. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  439. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  440. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  441. package/deps/librdkafka/src-cpp/README.md +16 -0
  442. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  443. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  444. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  445. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3771 -0
  446. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  447. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  448. package/deps/librdkafka/tests/0001-multiobj.c +98 -0
  449. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  450. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  451. package/deps/librdkafka/tests/0004-conf.c +867 -0
  452. package/deps/librdkafka/tests/0005-order.c +133 -0
  453. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  454. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  455. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  456. package/deps/librdkafka/tests/0009-mock_cluster.c +96 -0
  457. package/deps/librdkafka/tests/0011-produce_batch.c +752 -0
  458. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  459. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  460. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  461. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  462. package/deps/librdkafka/tests/0016-client_swname.c +166 -0
  463. package/deps/librdkafka/tests/0017-compression.c +142 -0
  464. package/deps/librdkafka/tests/0018-cgrp_term.c +333 -0
  465. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  466. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  467. package/deps/librdkafka/tests/0021-rkt_destroy.c +71 -0
  468. package/deps/librdkafka/tests/0022-consume_batch.c +276 -0
  469. package/deps/librdkafka/tests/0025-timers.c +147 -0
  470. package/deps/librdkafka/tests/0026-consume_pause.c +549 -0
  471. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  472. package/deps/librdkafka/tests/0029-assign_offset.c +204 -0
  473. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  474. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  475. package/deps/librdkafka/tests/0033-regex_subscribe.c +520 -0
  476. package/deps/librdkafka/tests/0034-offset_reset.c +377 -0
  477. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  478. package/deps/librdkafka/tests/0036-partial_fetch.c +86 -0
  479. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  480. package/deps/librdkafka/tests/0038-performance.c +120 -0
  481. package/deps/librdkafka/tests/0039-event.c +284 -0
  482. package/deps/librdkafka/tests/0040-io_event.c +251 -0
  483. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +96 -0
  484. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  485. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  486. package/deps/librdkafka/tests/0044-partition_cnt.c +93 -0
  487. package/deps/librdkafka/tests/0045-subscribe_update.c +746 -0
  488. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  489. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +97 -0
  490. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  491. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  492. package/deps/librdkafka/tests/0050-subscribe_adds.c +144 -0
  493. package/deps/librdkafka/tests/0051-assign_adds.c +125 -0
  494. package/deps/librdkafka/tests/0052-msg_timestamps.c +220 -0
  495. package/deps/librdkafka/tests/0053-stats_cb.cpp +535 -0
  496. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  497. package/deps/librdkafka/tests/0055-producer_latency.c +366 -0
  498. package/deps/librdkafka/tests/0056-balanced_group_mt.c +311 -0
  499. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  500. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  501. package/deps/librdkafka/tests/0059-bsearch.cpp +237 -0
  502. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  503. package/deps/librdkafka/tests/0061-consumer_lag.cpp +275 -0
  504. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  505. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  506. package/deps/librdkafka/tests/0064-interceptors.c +481 -0
  507. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  508. package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
  509. package/deps/librdkafka/tests/0067-empty_topic.cpp +148 -0
  510. package/deps/librdkafka/tests/0068-produce_timeout.c +138 -0
  511. package/deps/librdkafka/tests/0069-consumer_add_parts.c +123 -0
  512. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  513. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  514. package/deps/librdkafka/tests/0073-headers.c +381 -0
  515. package/deps/librdkafka/tests/0074-producev.c +87 -0
  516. package/deps/librdkafka/tests/0075-retry.c +253 -0
  517. package/deps/librdkafka/tests/0076-produce_retry.c +450 -0
  518. package/deps/librdkafka/tests/0077-compaction.c +357 -0
  519. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  520. package/deps/librdkafka/tests/0079-fork.c +93 -0
  521. package/deps/librdkafka/tests/0080-admin_ut.c +3065 -0
  522. package/deps/librdkafka/tests/0081-admin.c +5333 -0
  523. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +133 -0
  524. package/deps/librdkafka/tests/0083-cb_event.c +228 -0
  525. package/deps/librdkafka/tests/0084-destroy_flags.c +212 -0
  526. package/deps/librdkafka/tests/0085-headers.cpp +388 -0
  527. package/deps/librdkafka/tests/0086-purge.c +335 -0
  528. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  529. package/deps/librdkafka/tests/0089-max_poll_interval.c +506 -0
  530. package/deps/librdkafka/tests/0090-idempotence.c +172 -0
  531. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +297 -0
  532. package/deps/librdkafka/tests/0092-mixed_msgver.c +97 -0
  533. package/deps/librdkafka/tests/0093-holb.c +197 -0
  534. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +230 -0
  535. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  536. package/deps/librdkafka/tests/0097-ssl_verify.cpp +466 -0
  537. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  538. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  539. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  540. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  541. package/deps/librdkafka/tests/0102-static_group_rebalance.c +535 -0
  542. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  543. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +624 -0
  544. package/deps/librdkafka/tests/0105-transactions_mock.c +3923 -0
  545. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +297 -0
  546. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  547. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +218 -0
  548. package/deps/librdkafka/tests/0110-batch_size.cpp +183 -0
  549. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  550. package/deps/librdkafka/tests/0112-assign_unknown_part.c +98 -0
  551. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3329 -0
  552. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  553. package/deps/librdkafka/tests/0115-producer_auth.cpp +179 -0
  554. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +214 -0
  555. package/deps/librdkafka/tests/0117-mock_errors.c +321 -0
  556. package/deps/librdkafka/tests/0118-commit_rebalance.c +121 -0
  557. package/deps/librdkafka/tests/0119-consumer_auth.cpp +148 -0
  558. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +180 -0
  559. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  560. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  561. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  562. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  563. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  564. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +213 -0
  565. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  566. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
  567. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +78 -0
  568. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  569. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  570. package/deps/librdkafka/tests/0132-strategy_ordering.c +171 -0
  571. package/deps/librdkafka/tests/0133-ssl_keys.c +128 -0
  572. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  573. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
  574. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  575. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +609 -0
  576. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  577. package/deps/librdkafka/tests/0139-offset_validation_mock.c +442 -0
  578. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  579. package/deps/librdkafka/tests/0142-reauthentication.c +495 -0
  580. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +553 -0
  581. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  582. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  583. package/deps/librdkafka/tests/0146-metadata_mock.c +444 -0
  584. package/deps/librdkafka/tests/0150-telemetry_mock.c +648 -0
  585. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  586. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  587. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  588. package/deps/librdkafka/tests/CMakeLists.txt +164 -0
  589. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +266 -0
  590. package/deps/librdkafka/tests/Makefile +182 -0
  591. package/deps/librdkafka/tests/README.md +509 -0
  592. package/deps/librdkafka/tests/autotest.sh +33 -0
  593. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  594. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  595. package/deps/librdkafka/tests/buildbox.sh +17 -0
  596. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  597. package/deps/librdkafka/tests/cluster_testing.py +191 -0
  598. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  599. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  600. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  601. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  602. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +109 -0
  603. package/deps/librdkafka/tests/fixtures/ssl/client2.key +34 -0
  604. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +93 -0
  605. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  606. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  607. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  608. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  609. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  610. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  611. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  612. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  613. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  614. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  615. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  616. package/deps/librdkafka/tests/java/Makefile +12 -0
  617. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  618. package/deps/librdkafka/tests/java/README.md +14 -0
  619. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  620. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  621. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  622. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  623. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  624. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  625. package/deps/librdkafka/tests/performance_plot.py +115 -0
  626. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  627. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  628. package/deps/librdkafka/tests/requirements.txt +2 -0
  629. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  630. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  631. package/deps/librdkafka/tests/run-test.sh +140 -0
  632. package/deps/librdkafka/tests/rusage.c +249 -0
  633. package/deps/librdkafka/tests/sasl_test.py +289 -0
  634. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  635. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  636. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  637. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  638. package/deps/librdkafka/tests/sockem.c +801 -0
  639. package/deps/librdkafka/tests/sockem.h +85 -0
  640. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  641. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  642. package/deps/librdkafka/tests/test.c +7318 -0
  643. package/deps/librdkafka/tests/test.conf.example +27 -0
  644. package/deps/librdkafka/tests/test.h +979 -0
  645. package/deps/librdkafka/tests/testcpp.cpp +126 -0
  646. package/deps/librdkafka/tests/testcpp.h +360 -0
  647. package/deps/librdkafka/tests/testshared.h +402 -0
  648. package/deps/librdkafka/tests/tools/README.md +4 -0
  649. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  650. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  651. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  652. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  653. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  654. package/deps/librdkafka/tests/until-fail.sh +87 -0
  655. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  656. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  657. package/deps/librdkafka/vcpkg.json +23 -0
  658. package/deps/librdkafka/win32/README.md +5 -0
  659. package/deps/librdkafka/win32/build-package.bat +3 -0
  660. package/deps/librdkafka/win32/build.bat +19 -0
  661. package/deps/librdkafka/win32/common.vcxproj +84 -0
  662. package/deps/librdkafka/win32/install-openssl.ps1 +33 -0
  663. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  664. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  665. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  666. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  667. package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
  668. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  669. package/deps/librdkafka/win32/msbuild.ps1 +15 -0
  670. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  671. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  672. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  673. package/deps/librdkafka/win32/push-package.bat +4 -0
  674. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  675. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  676. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  677. package/deps/librdkafka/win32/setup-msys2.ps1 +31 -0
  678. package/deps/librdkafka/win32/setup-vcpkg.ps1 +12 -0
  679. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  680. package/deps/librdkafka/win32/tests/tests.vcxproj +247 -0
  681. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  682. package/deps/librdkafka/win32/wingetopt.c +564 -0
  683. package/deps/librdkafka/win32/wingetopt.h +100 -0
  684. package/deps/librdkafka/win32/wintime.h +33 -0
  685. package/deps/librdkafka.gyp +62 -0
  686. package/deps/windows-install.py +73 -0
  687. package/docker-compose.yml +23 -0
  688. package/e2e/admin.spec.js +187 -0
  689. package/e2e/both.spec.js +726 -0
  690. package/e2e/consumer.spec.js +386 -0
  691. package/e2e/groups.spec.js +132 -0
  692. package/e2e/listener.js +51 -0
  693. package/e2e/producer-transaction.spec.js +333 -0
  694. package/e2e/producer.spec.js +283 -0
  695. package/errors.d.ts +347 -0
  696. package/examples/consumer-flow.md +76 -0
  697. package/examples/consumer.md +45 -0
  698. package/examples/docker-alpine.md +30 -0
  699. package/examples/high-level-producer.md +32 -0
  700. package/examples/metadata.md +27 -0
  701. package/examples/oauthbearer-default-flow.md +80 -0
  702. package/examples/producer-cluster.md +103 -0
  703. package/examples/producer.md +73 -0
  704. package/index.d.ts +357 -0
  705. package/lib/admin.js +233 -0
  706. package/lib/client.js +578 -0
  707. package/lib/error.js +472 -0
  708. package/lib/index.js +34 -0
  709. package/lib/kafka-consumer-stream.js +397 -0
  710. package/lib/kafka-consumer.js +698 -0
  711. package/lib/producer/high-level-producer.js +323 -0
  712. package/lib/producer-stream.js +307 -0
  713. package/lib/producer.js +375 -0
  714. package/lib/tools/ref-counter.js +52 -0
  715. package/lib/topic-partition.js +88 -0
  716. package/lib/topic.js +42 -0
  717. package/lib/util.js +29 -0
  718. package/librdkafka.js +12 -0
  719. package/make_docs.sh +59 -0
  720. package/package.json +53 -0
  721. package/renovate.json +30 -0
  722. package/run_docker.sh +42 -0
  723. package/src/admin.cc +624 -0
  724. package/src/admin.h +78 -0
  725. package/src/binding.cc +73 -0
  726. package/src/binding.h +25 -0
  727. package/src/callbacks.cc +614 -0
  728. package/src/callbacks.h +265 -0
  729. package/src/common.cc +582 -0
  730. package/src/common.h +134 -0
  731. package/src/config.cc +167 -0
  732. package/src/config.h +45 -0
  733. package/src/connection.cc +482 -0
  734. package/src/connection.h +108 -0
  735. package/src/errors.cc +96 -0
  736. package/src/errors.h +53 -0
  737. package/src/kafka-consumer.cc +1457 -0
  738. package/src/kafka-consumer.h +136 -0
  739. package/src/per-isolate-data.cc +57 -0
  740. package/src/per-isolate-data.h +39 -0
  741. package/src/producer.cc +873 -0
  742. package/src/producer.h +125 -0
  743. package/src/topic.cc +180 -0
  744. package/src/topic.h +56 -0
  745. package/src/workers.cc +1245 -0
  746. package/src/workers.h +511 -0
  747. package/test/binding.spec.js +66 -0
  748. package/test/consumer.spec.js +91 -0
  749. package/test/error.spec.js +8 -0
  750. package/test/index.spec.js +8 -0
  751. package/test/kafka-consumer-stream.spec.js +298 -0
  752. package/test/kafka-consumer-worker.js +51 -0
  753. package/test/kafka-consumer.spec.js +86 -0
  754. package/test/mocha.opts +1 -0
  755. package/test/mock.js +55 -0
  756. package/test/producer/high-level-producer.spec.js +496 -0
  757. package/test/producer-stream.spec.js +723 -0
  758. package/test/producer-worker.js +53 -0
  759. package/test/producer.spec.js +120 -0
  760. package/test/tools/ref-counter.spec.js +53 -0
  761. package/test/topic-partition.spec.js +104 -0
  762. package/test/util.spec.js +46 -0
  763. package/util/configure.js +30 -0
  764. package/util/get-env.js +6 -0
  765. package/util/test-compile.js +11 -0
  766. package/util/test-producer-delivery.js +100 -0
  767. package/win_install.ps1 +2 -0
@@ -0,0 +1,961 @@
1
+ /*
2
+ * Copyright (c) 2015, Confluent Inc
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions are met:
7
+ *
8
+ * 1. Redistributions of source code must retain the above copyright notice,
9
+ * this list of conditions and the following disclaimer.
10
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
11
+ * this list of conditions and the following disclaimer in the documentation
12
+ * and/or other materials provided with the distribution.
13
+ *
14
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24
+ * POSSIBILITY OF SUCH DAMAGE.
25
+ */
26
+
27
+ /**
28
+ * librdkafka version of the Java VerifiableProducer and VerifiableConsumer
29
+ * for use with the official Kafka client tests.
30
+ */
31
+
32
+
33
+ #include <iostream>
34
+ #include <fstream>
35
+ #include <sstream>
36
+ #include <map>
37
+ #include <string>
38
+ #include <algorithm>
39
+ #include <cstdlib>
40
+ #include <cstdio>
41
+ #include <csignal>
42
+ #include <cstring>
43
+ #include <unistd.h>
44
+ #include <sys/time.h>
45
+ #include <assert.h>
46
+ #include <ctype.h>
47
+ #include <strings.h>
48
+
49
+ #ifdef _WIN32
50
+ #include "../win32/wingetopt.h"
51
+ #elif _AIX
52
+ #include <unistd.h>
53
+ #else
54
+ #include <getopt.h>
55
+ #endif
56
+
57
+ /*
58
+ * Typically include path in a real application would be
59
+ * #include <librdkafka/rdkafkacpp.h>
60
+ */
61
+ #include "rdkafkacpp.h"
62
+
63
+ static volatile sig_atomic_t run = 1;
64
+ static bool exit_eof = false;
65
+ static int verbosity = 1;
66
+ static std::string value_prefix;
67
+
68
+ class Assignment {
69
+ public:
70
+ static std::string name(const std::string &t, int partition) {
71
+ std::stringstream stm;
72
+ stm << t << "." << partition;
73
+ return stm.str();
74
+ }
75
+
76
+ Assignment() :
77
+ topic(""),
78
+ partition(-1),
79
+ consumedMessages(0),
80
+ minOffset(-1),
81
+ maxOffset(0) {
82
+ printf("Created assignment\n");
83
+ }
84
+ Assignment(const Assignment &a) {
85
+ topic = a.topic;
86
+ partition = a.partition;
87
+ consumedMessages = a.consumedMessages;
88
+ minOffset = a.minOffset;
89
+ maxOffset = a.maxOffset;
90
+ }
91
+
92
+ Assignment &operator=(const Assignment &a) {
93
+ this->topic = a.topic;
94
+ this->partition = a.partition;
95
+ this->consumedMessages = a.consumedMessages;
96
+ this->minOffset = a.minOffset;
97
+ this->maxOffset = a.maxOffset;
98
+ return *this;
99
+ }
100
+
101
+ int operator==(const Assignment &a) const {
102
+ return !(this->topic == a.topic && this->partition == a.partition);
103
+ }
104
+
105
+ int operator<(const Assignment &a) const {
106
+ if (this->topic < a.topic)
107
+ return 1;
108
+ if (this->topic >= a.topic)
109
+ return 0;
110
+ return (this->partition < a.partition);
111
+ }
112
+
113
+ void setup(std::string t, int32_t p) {
114
+ assert(!t.empty());
115
+ assert(topic.empty() || topic == t);
116
+ assert(partition == -1 || partition == p);
117
+ topic = t;
118
+ partition = p;
119
+ }
120
+
121
+ std::string topic;
122
+ int partition;
123
+ int consumedMessages;
124
+ int64_t minOffset;
125
+ int64_t maxOffset;
126
+ };
127
+
128
+
129
+
130
+ static struct {
131
+ int maxMessages;
132
+
133
+ struct {
134
+ int numAcked;
135
+ int numSent;
136
+ int numErr;
137
+ } producer;
138
+
139
+ struct {
140
+ int consumedMessages;
141
+ int consumedMessagesLastReported;
142
+ int consumedMessagesAtLastCommit;
143
+ bool useAutoCommit;
144
+ std::map<std::string, Assignment> assignments;
145
+ } consumer;
146
+ } state = {
147
+ /* .maxMessages = */ -1};
148
+
149
+
150
+ static RdKafka::KafkaConsumer *consumer;
151
+
152
+
153
+ static std::string now() {
154
+ struct timeval tv;
155
+ gettimeofday(&tv, NULL);
156
+ time_t t = tv.tv_sec;
157
+ struct tm tm;
158
+ char buf[64];
159
+
160
+ localtime_r(&t, &tm);
161
+ strftime(buf, sizeof(buf), "%H:%M:%S", &tm);
162
+ snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ".%03d",
163
+ (int)(tv.tv_usec / 1000));
164
+
165
+ return buf;
166
+ }
167
+
168
+
169
+ static time_t watchdog_last_kick;
170
+ static const int watchdog_timeout = 20; /* Must be > socket.timeout.ms */
171
+ static void sigwatchdog(int sig) {
172
+ time_t t = time(NULL);
173
+ if (watchdog_last_kick + watchdog_timeout <= t) {
174
+ std::cerr << now() << ": WATCHDOG TIMEOUT ("
175
+ << (int)(t - watchdog_last_kick) << "s): TERMINATING"
176
+ << std::endl;
177
+ int *i = NULL;
178
+ *i = 100;
179
+ abort();
180
+ }
181
+ }
182
+
183
+ static void watchdog_kick() {
184
+ watchdog_last_kick = time(NULL);
185
+
186
+ /* Safe guard against hangs-on-exit */
187
+ alarm(watchdog_timeout);
188
+ }
189
+
190
+
191
+
192
+ static void errorString(const std::string &name,
193
+ const std::string &errmsg,
194
+ const std::string &topic,
195
+ const std::string *key,
196
+ const std::string &value) {
197
+ std::cout << "{ "
198
+ << "\"name\": \"" << name << "\", "
199
+ << "\"_time\": \"" << now() << "\", "
200
+ << "\"message\": \"" << errmsg << "\", "
201
+ << "\"topic\": \"" << topic << "\", "
202
+ << "\"key\": \"" << (key ? *key : "NULL") << "\", "
203
+ << "\"value\": \"" << value << "\" "
204
+ << "}" << std::endl;
205
+ }
206
+
207
+
208
+ static void successString(const std::string &name,
209
+ const std::string &topic,
210
+ int partition,
211
+ int64_t offset,
212
+ const std::string *key,
213
+ const std::string &value) {
214
+ std::cout << "{ "
215
+ << "\"name\": \"" << name << "\", "
216
+ << "\"_time\": \"" << now() << "\", "
217
+ << "\"topic\": \"" << topic << "\", "
218
+ << "\"partition\": " << partition << ", "
219
+ << "\"offset\": " << offset << ", "
220
+ << "\"key\": \"" << (key ? *key : "NULL") << "\", "
221
+ << "\"value\": \"" << value << "\" "
222
+ << "}" << std::endl;
223
+ }
224
+
225
+
226
+ #if FIXME
227
+ static void offsetStatus(bool success,
228
+ const std::string &topic,
229
+ int partition,
230
+ int64_t offset,
231
+ const std::string &errstr) {
232
+ std::cout << "{ "
233
+ "\"name\": \"offsets_committed\", "
234
+ << "\"success\": " << success << ", "
235
+ << "\"offsets\": [ "
236
+ << " { "
237
+ << " \"topic\": \"" << topic << "\", "
238
+ << " \"partition\": " << partition << ", "
239
+ << " \"offset\": " << (int)offset << ", "
240
+ << " \"error\": \"" << errstr << "\" "
241
+ << " } "
242
+ << "] }" << std::endl;
243
+ }
244
+ #endif
245
+
246
+
247
+ static void sigterm(int sig) {
248
+ std::cerr << now() << ": Terminating because of signal " << sig << std::endl;
249
+
250
+ if (!run) {
251
+ std::cerr << now() << ": Forced termination" << std::endl;
252
+ exit(1);
253
+ }
254
+ run = 0;
255
+ }
256
+
257
+
258
+ class ExampleDeliveryReportCb : public RdKafka::DeliveryReportCb {
259
+ public:
260
+ void dr_cb(RdKafka::Message &message) {
261
+ if (message.err()) {
262
+ state.producer.numErr++;
263
+ errorString("producer_send_error", message.errstr(), message.topic_name(),
264
+ message.key(),
265
+ std::string(static_cast<const char *>(message.payload()),
266
+ message.len()));
267
+ } else {
268
+ successString("producer_send_success", message.topic_name(),
269
+ (int)message.partition(), message.offset(), message.key(),
270
+ std::string(static_cast<const char *>(message.payload()),
271
+ message.len()));
272
+ state.producer.numAcked++;
273
+ }
274
+ }
275
+ };
276
+
277
+
278
+ class ExampleEventCb : public RdKafka::EventCb {
279
+ public:
280
+ void event_cb(RdKafka::Event &event) {
281
+ switch (event.type()) {
282
+ case RdKafka::Event::EVENT_ERROR:
283
+ std::cerr << now() << ": ERROR (" << RdKafka::err2str(event.err())
284
+ << "): " << event.str() << std::endl;
285
+ break;
286
+
287
+ case RdKafka::Event::EVENT_STATS:
288
+ std::cerr << now() << ": \"STATS\": " << event.str() << std::endl;
289
+ break;
290
+
291
+ case RdKafka::Event::EVENT_LOG:
292
+ std::cerr << now() << ": LOG-" << event.severity() << "-" << event.fac()
293
+ << ": " << event.str() << std::endl;
294
+ break;
295
+
296
+ default:
297
+ std::cerr << now() << ": EVENT " << event.type() << " ("
298
+ << RdKafka::err2str(event.err()) << "): " << event.str()
299
+ << std::endl;
300
+ break;
301
+ }
302
+ }
303
+ };
304
+
305
+
306
+ /* Use of this partitioner is pretty pointless since no key is provided
307
+ * in the produce() call. */
308
+ class MyHashPartitionerCb : public RdKafka::PartitionerCb {
309
+ public:
310
+ int32_t partitioner_cb(const RdKafka::Topic *topic,
311
+ const std::string *key,
312
+ int32_t partition_cnt,
313
+ void *msg_opaque) {
314
+ return djb_hash(key->c_str(), key->size()) % partition_cnt;
315
+ }
316
+
317
+ private:
318
+ static inline unsigned int djb_hash(const char *str, size_t len) {
319
+ unsigned int hash = 5381;
320
+ for (size_t i = 0; i < len; i++)
321
+ hash = ((hash << 5) + hash) + str[i];
322
+ return hash;
323
+ }
324
+ };
325
+
326
+
327
+
328
+ /**
329
+ * Print number of records consumed, every 100 messages or on timeout.
330
+ */
331
+ static void report_records_consumed(int immediate) {
332
+ std::map<std::string, Assignment> *assignments = &state.consumer.assignments;
333
+
334
+ if (state.consumer.consumedMessages <=
335
+ state.consumer.consumedMessagesLastReported + (immediate ? 0 : 999))
336
+ return;
337
+
338
+ std::cout << "{ "
339
+ "\"name\": \"records_consumed\", "
340
+ << "\"_totcount\": " << state.consumer.consumedMessages << ", "
341
+ << "\"count\": "
342
+ << (state.consumer.consumedMessages -
343
+ state.consumer.consumedMessagesLastReported)
344
+ << ", "
345
+ << "\"partitions\": [ ";
346
+
347
+ for (std::map<std::string, Assignment>::iterator ii = assignments->begin();
348
+ ii != assignments->end(); ii++) {
349
+ Assignment *a = &(*ii).second;
350
+ assert(!a->topic.empty());
351
+ std::cout << (ii == assignments->begin() ? "" : ", ") << " { "
352
+ << " \"topic\": \"" << a->topic << "\", "
353
+ << " \"partition\": " << a->partition << ", "
354
+ << " \"minOffset\": " << a->minOffset << ", "
355
+ << " \"maxOffset\": " << a->maxOffset << " "
356
+ << " } ";
357
+ a->minOffset = -1;
358
+ }
359
+
360
+ std::cout << "] }" << std::endl;
361
+
362
+ state.consumer.consumedMessagesLastReported = state.consumer.consumedMessages;
363
+ }
364
+
365
+
366
+ class ExampleOffsetCommitCb : public RdKafka::OffsetCommitCb {
367
+ public:
368
+ void offset_commit_cb(RdKafka::ErrorCode err,
369
+ std::vector<RdKafka::TopicPartition *> &offsets) {
370
+ std::cerr << now() << ": Propagate offset for " << offsets.size()
371
+ << " partitions, error: " << RdKafka::err2str(err) << std::endl;
372
+
373
+ /* No offsets to commit, dont report anything. */
374
+ if (err == RdKafka::ERR__NO_OFFSET)
375
+ return;
376
+
377
+ /* Send up-to-date records_consumed report to make sure consumed > committed
378
+ */
379
+ report_records_consumed(1);
380
+
381
+ std::cout << "{ "
382
+ << "\"name\": \"offsets_committed\", "
383
+ << "\"success\": " << (err ? "false" : "true") << ", "
384
+ << "\"error\": \"" << (err ? RdKafka::err2str(err) : "") << "\", "
385
+ << "\"_autocommit\": "
386
+ << (state.consumer.useAutoCommit ? "true" : "false") << ", "
387
+ << "\"offsets\": [ ";
388
+ assert(offsets.size() > 0);
389
+ for (unsigned int i = 0; i < offsets.size(); i++) {
390
+ std::cout << (i == 0 ? "" : ", ") << "{ "
391
+ << " \"topic\": \"" << offsets[i]->topic() << "\", "
392
+ << " \"partition\": " << offsets[i]->partition() << ", "
393
+ << " \"offset\": " << (int)offsets[i]->offset() << ", "
394
+ << " \"error\": \""
395
+ << (offsets[i]->err() ? RdKafka::err2str(offsets[i]->err())
396
+ : "")
397
+ << "\" "
398
+ << " }";
399
+ }
400
+ std::cout << " ] }" << std::endl;
401
+ }
402
+ };
403
+
404
+ static ExampleOffsetCommitCb ex_offset_commit_cb;
405
+
406
+
407
+ /**
408
+ * Commit every 1000 messages or whenever there is a consume timeout.
409
+ */
410
+ static void do_commit(RdKafka::KafkaConsumer *consumer, int immediate) {
411
+ if (!immediate && (state.consumer.useAutoCommit ||
412
+ state.consumer.consumedMessagesAtLastCommit + 1000 >
413
+ state.consumer.consumedMessages))
414
+ return;
415
+
416
+ /* Make sure we report consumption before commit,
417
+ * otherwise tests may fail because of commit > consumed. */
418
+ if (state.consumer.consumedMessagesLastReported <
419
+ state.consumer.consumedMessages)
420
+ report_records_consumed(1);
421
+
422
+ std::cerr << now() << ": committing "
423
+ << (state.consumer.consumedMessages -
424
+ state.consumer.consumedMessagesAtLastCommit)
425
+ << " messages" << std::endl;
426
+
427
+ RdKafka::ErrorCode err;
428
+ err = consumer->commitSync(&ex_offset_commit_cb);
429
+
430
+ std::cerr << now() << ": "
431
+ << "sync commit returned " << RdKafka::err2str(err) << std::endl;
432
+
433
+ state.consumer.consumedMessagesAtLastCommit = state.consumer.consumedMessages;
434
+ }
435
+
436
+
437
+ void msg_consume(RdKafka::KafkaConsumer *consumer,
438
+ RdKafka::Message *msg,
439
+ void *opaque) {
440
+ switch (msg->err()) {
441
+ case RdKafka::ERR__TIMED_OUT:
442
+ /* Try reporting consumed messages */
443
+ report_records_consumed(1);
444
+ /* Commit one every consume() timeout instead of on every message.
445
+ * Also commit on every 1000 messages, whichever comes first. */
446
+ do_commit(consumer, 1);
447
+ break;
448
+
449
+
450
+ case RdKafka::ERR_NO_ERROR: {
451
+ /* Real message */
452
+ if (verbosity > 2)
453
+ std::cerr << now() << ": Read msg from " << msg->topic_name() << " ["
454
+ << (int)msg->partition() << "] at offset " << msg->offset()
455
+ << std::endl;
456
+
457
+ if (state.maxMessages >= 0 &&
458
+ state.consumer.consumedMessages >= state.maxMessages)
459
+ return;
460
+
461
+
462
+ Assignment *a = &state.consumer.assignments[Assignment::name(
463
+ msg->topic_name(), msg->partition())];
464
+ a->setup(msg->topic_name(), msg->partition());
465
+
466
+ a->consumedMessages++;
467
+ if (a->minOffset == -1)
468
+ a->minOffset = msg->offset();
469
+ if (a->maxOffset < msg->offset())
470
+ a->maxOffset = msg->offset();
471
+
472
+ if (msg->key()) {
473
+ if (verbosity >= 3)
474
+ std::cerr << now() << ": Key: " << *msg->key() << std::endl;
475
+ }
476
+
477
+ if (verbosity >= 3)
478
+ fprintf(stderr, "%.*s\n", static_cast<int>(msg->len()),
479
+ static_cast<const char *>(msg->payload()));
480
+
481
+ state.consumer.consumedMessages++;
482
+
483
+ report_records_consumed(0);
484
+
485
+ do_commit(consumer, 0);
486
+ } break;
487
+
488
+ case RdKafka::ERR__PARTITION_EOF:
489
+ /* Last message */
490
+ if (exit_eof) {
491
+ std::cerr << now() << ": Terminate: exit on EOF" << std::endl;
492
+ run = 0;
493
+ }
494
+ break;
495
+
496
+ case RdKafka::ERR__UNKNOWN_TOPIC:
497
+ case RdKafka::ERR__UNKNOWN_PARTITION:
498
+ std::cerr << now() << ": Consume failed: " << msg->errstr() << std::endl;
499
+ run = 0;
500
+ break;
501
+
502
+ case RdKafka::ERR_GROUP_COORDINATOR_NOT_AVAILABLE:
503
+ std::cerr << now() << ": Warning: " << msg->errstr() << std::endl;
504
+ break;
505
+
506
+ default:
507
+ /* Errors */
508
+ std::cerr << now() << ": Consume failed: " << msg->errstr() << std::endl;
509
+ run = 0;
510
+ }
511
+ }
512
+
513
+
514
+
515
+ class ExampleConsumeCb : public RdKafka::ConsumeCb {
516
+ public:
517
+ void consume_cb(RdKafka::Message &msg, void *opaque) {
518
+ msg_consume(consumer_, &msg, opaque);
519
+ }
520
+ RdKafka::KafkaConsumer *consumer_;
521
+ };
522
+
523
+ class ExampleRebalanceCb : public RdKafka::RebalanceCb {
524
+ private:
525
+ static std::string part_list_json(
526
+ const std::vector<RdKafka::TopicPartition *> &partitions) {
527
+ std::ostringstream out;
528
+ for (unsigned int i = 0; i < partitions.size(); i++)
529
+ out << (i == 0 ? "" : ", ") << "{ "
530
+ << " \"topic\": \"" << partitions[i]->topic() << "\", "
531
+ << " \"partition\": " << partitions[i]->partition() << " }";
532
+ return out.str();
533
+ }
534
+
535
+ public:
536
+ void rebalance_cb(RdKafka::KafkaConsumer *consumer,
537
+ RdKafka::ErrorCode err,
538
+ std::vector<RdKafka::TopicPartition *> &partitions) {
539
+ std::cerr << now() << ": rebalance_cb " << RdKafka::err2str(err) << " for "
540
+ << partitions.size() << " partitions" << std::endl;
541
+ /* Send message report prior to rebalancing event to make sure they
542
+ * are accounted for on the "right side" of the rebalance. */
543
+ report_records_consumed(1);
544
+
545
+ if (err == RdKafka::ERR__ASSIGN_PARTITIONS)
546
+ consumer->assign(partitions);
547
+ else {
548
+ do_commit(consumer, 1);
549
+ consumer->unassign();
550
+ }
551
+
552
+ std::cout << "{ "
553
+ << "\"name\": \"partitions_"
554
+ << (err == RdKafka::ERR__ASSIGN_PARTITIONS ? "assigned"
555
+ : "revoked")
556
+ << "\", "
557
+ << "\"partitions\": [ " << part_list_json(partitions) << "] }"
558
+ << std::endl;
559
+ }
560
+ };
561
+
562
+
563
+
564
+ /**
565
+ * @brief Read (Java client) configuration file
566
+ */
567
+ static void read_conf_file(RdKafka::Conf *conf, const std::string &conf_file) {
568
+ std::ifstream inf(conf_file.c_str());
569
+
570
+ if (!inf) {
571
+ std::cerr << now() << ": " << conf_file << ": could not open file"
572
+ << std::endl;
573
+ exit(1);
574
+ }
575
+
576
+ std::cerr << now() << ": " << conf_file << ": read config file" << std::endl;
577
+
578
+ std::string line;
579
+ int linenr = 0;
580
+
581
+ while (std::getline(inf, line)) {
582
+ linenr++;
583
+
584
+ // Ignore comments and empty lines
585
+ if (line[0] == '#' || line.length() == 0)
586
+ continue;
587
+
588
+ // Match on key=value..
589
+ size_t d = line.find("=");
590
+ if (d == 0 || d == std::string::npos) {
591
+ std::cerr << now() << ": " << conf_file << ":" << linenr << ": " << line
592
+ << ": ignoring invalid line (expect key=value): "
593
+ << ::std::endl;
594
+ continue;
595
+ }
596
+
597
+ std::string key = line.substr(0, d);
598
+ std::string val = line.substr(d + 1);
599
+
600
+ std::string errstr;
601
+ if (conf->set(key, val, errstr)) {
602
+ std::cerr << now() << ": " << conf_file << ":" << linenr << ": " << key
603
+ << "=" << val << ": " << errstr << ": ignoring error"
604
+ << std::endl;
605
+ } else {
606
+ std::cerr << now() << ": " << conf_file << ":" << linenr << ": " << key
607
+ << "=" << val << ": applied to configuration" << std::endl;
608
+ }
609
+ }
610
+
611
+ inf.close();
612
+ }
613
+
614
+
615
+
616
+ int main(int argc, char **argv) {
617
+ std::string brokers = "localhost";
618
+ std::string errstr;
619
+ std::vector<std::string> topics;
620
+ std::string mode = "P";
621
+ int throughput = 0;
622
+ int32_t partition = RdKafka::Topic::PARTITION_UA;
623
+ MyHashPartitionerCb hash_partitioner;
624
+ int64_t create_time = -1;
625
+
626
+ std::cerr << now() << ": librdkafka version " << RdKafka::version_str()
627
+ << " (" << RdKafka::version() << ")" << std::endl;
628
+
629
+ /*
630
+ * Create configuration objects
631
+ */
632
+ RdKafka::Conf *conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
633
+
634
+ /* Java VerifiableProducer defaults to acks=all */
635
+ if (conf->set("acks", "all", errstr)) {
636
+ std::cerr << now() << ": " << errstr << std::endl;
637
+ exit(1);
638
+ }
639
+
640
+ /* Avoid slow shutdown on error */
641
+ if (conf->set("message.timeout.ms", "60000", errstr)) {
642
+ std::cerr << now() << ": " << errstr << std::endl;
643
+ exit(1);
644
+ }
645
+
646
+ {
647
+ char hostname[128];
648
+ gethostname(hostname, sizeof(hostname) - 1);
649
+ conf->set("client.id", std::string("rdkafka@") + hostname, errstr);
650
+ }
651
+
652
+ conf->set("log.thread.name", "true", errstr);
653
+
654
+ /* auto commit is explicitly enabled with --enable-autocommit */
655
+ conf->set("enable.auto.commit", "false", errstr);
656
+
657
+ /* keep protocol request timeouts under the watchdog timeout
658
+ * to make sure things like commitSync() dont fall victim to the watchdog. */
659
+ conf->set("socket.timeout.ms", "10000", errstr);
660
+
661
+ conf->set("fetch.wait.max.ms", "500", errstr);
662
+ conf->set("fetch.min.bytes", "4096", errstr);
663
+
664
+ conf->set("enable.partition.eof", "true", errstr);
665
+
666
+ for (int i = 1; i < argc; i++) {
667
+ const char *name = argv[i];
668
+ const char *val = i + 1 < argc ? argv[i + 1] : NULL;
669
+
670
+ if (val && !strncmp(val, "-", 1))
671
+ val = NULL;
672
+
673
+ std::cout << now() << ": argument: " << name << " " << (val ? val : "")
674
+ << std::endl;
675
+
676
+ if (val) {
677
+ if (!strcmp(name, "--topic"))
678
+ topics.push_back(val);
679
+ else if (!strcmp(name, "--broker-list"))
680
+ brokers = val;
681
+ else if (!strcmp(name, "--max-messages"))
682
+ state.maxMessages = atoi(val);
683
+ else if (!strcmp(name, "--throughput"))
684
+ throughput = atoi(val);
685
+ else if (!strcmp(name, "--producer.config") ||
686
+ !strcmp(name, "--consumer.config"))
687
+ read_conf_file(conf, val);
688
+ else if (!strcmp(name, "--group-id"))
689
+ conf->set("group.id", val, errstr);
690
+ else if (!strcmp(name, "--session-timeout"))
691
+ conf->set("session.timeout.ms", val, errstr);
692
+ else if (!strcmp(name, "--reset-policy")) {
693
+ if (conf->set("auto.offset.reset", val, errstr)) {
694
+ std::cerr << now() << ": " << errstr << std::endl;
695
+ exit(1);
696
+ }
697
+ } else if (!strcmp(name, "--assignment-strategy")) {
698
+ /* The system tests pass the Java class name(s) rather than
699
+ * the configuration value. Fix it.
700
+ * "org.apache.kafka.clients.consumer.RangeAssignor,.." -> "range,.."
701
+ */
702
+ std::string s = val;
703
+ size_t pos;
704
+
705
+ while ((pos = s.find("org.apache.kafka.clients.consumer.")) !=
706
+ std::string::npos)
707
+ s.erase(pos, strlen("org.apache.kafka.clients.consumer."));
708
+
709
+ while ((pos = s.find("Assignor")) != std::string::npos)
710
+ s.erase(pos, strlen("Assignor"));
711
+
712
+ std::transform(s.begin(), s.end(), s.begin(), tolower);
713
+
714
+ std::cerr << now() << ": converted " << name << " " << val << " to "
715
+ << s << std::endl;
716
+
717
+ if (conf->set("partition.assignment.strategy", s.c_str(), errstr)) {
718
+ std::cerr << now() << ": " << errstr << std::endl;
719
+ exit(1);
720
+ }
721
+ } else if (!strcmp(name, "--value-prefix")) {
722
+ value_prefix = std::string(val) + ".";
723
+ } else if (!strcmp(name, "--acks")) {
724
+ if (conf->set("acks", val, errstr)) {
725
+ std::cerr << now() << ": " << errstr << std::endl;
726
+ exit(1);
727
+ }
728
+ } else if (!strcmp(name, "--message-create-time")) {
729
+ create_time = (int64_t)atoi(val);
730
+ } else if (!strcmp(name, "--debug")) {
731
+ conf->set("debug", val, errstr);
732
+ } else if (!strcmp(name, "-X")) {
733
+ char *s = strdup(val);
734
+ char *t = strchr(s, '=');
735
+ if (!t)
736
+ t = (char *)"";
737
+ else {
738
+ *t = '\0';
739
+ t++;
740
+ }
741
+ if (conf->set(s, t, errstr)) {
742
+ std::cerr << now() << ": " << errstr << std::endl;
743
+ exit(1);
744
+ }
745
+ free(s);
746
+ } else {
747
+ std::cerr << now() << ": Unknown option " << name << std::endl;
748
+ exit(1);
749
+ }
750
+
751
+ i++;
752
+
753
+ } else {
754
+ if (!strcmp(name, "--consumer"))
755
+ mode = "C";
756
+ else if (!strcmp(name, "--producer"))
757
+ mode = "P";
758
+ else if (!strcmp(name, "--enable-autocommit")) {
759
+ state.consumer.useAutoCommit = true;
760
+ conf->set("enable.auto.commit", "true", errstr);
761
+ } else if (!strcmp(name, "-v"))
762
+ verbosity++;
763
+ else if (!strcmp(name, "-q"))
764
+ verbosity--;
765
+ else {
766
+ std::cerr << now() << ": Unknown option or missing argument to " << name
767
+ << std::endl;
768
+ exit(1);
769
+ }
770
+ }
771
+ }
772
+
773
+ if (topics.empty() || brokers.empty()) {
774
+ std::cerr << now() << ": Missing --topic and --broker-list" << std::endl;
775
+ exit(1);
776
+ }
777
+
778
+
779
+ /*
780
+ * Set configuration properties
781
+ */
782
+ conf->set("metadata.broker.list", brokers, errstr);
783
+
784
+ ExampleEventCb ex_event_cb;
785
+ conf->set("event_cb", &ex_event_cb, errstr);
786
+
787
+ signal(SIGINT, sigterm);
788
+ signal(SIGTERM, sigterm);
789
+ signal(SIGALRM, sigwatchdog);
790
+
791
+
792
+ if (mode == "P") {
793
+ /*
794
+ * Producer mode
795
+ */
796
+
797
+ ExampleDeliveryReportCb ex_dr_cb;
798
+
799
+ /* Set delivery report callback */
800
+ conf->set("dr_cb", &ex_dr_cb, errstr);
801
+
802
+ /*
803
+ * Create producer using accumulated global configuration.
804
+ */
805
+ RdKafka::Producer *producer = RdKafka::Producer::create(conf, errstr);
806
+ if (!producer) {
807
+ std::cerr << now() << ": Failed to create producer: " << errstr
808
+ << std::endl;
809
+ exit(1);
810
+ }
811
+
812
+ std::cerr << now() << ": % Created producer " << producer->name()
813
+ << std::endl;
814
+
815
+ /*
816
+ * Create topic handle.
817
+ */
818
+ RdKafka::Topic *topic =
819
+ RdKafka::Topic::create(producer, topics[0], NULL, errstr);
820
+ if (!topic) {
821
+ std::cerr << now() << ": Failed to create topic: " << errstr << std::endl;
822
+ exit(1);
823
+ }
824
+
825
+ static const int delay_us = throughput ? 1000000 / throughput : 10;
826
+
827
+ if (state.maxMessages == -1)
828
+ state.maxMessages = 1000000; /* Avoid infinite produce */
829
+
830
+ for (int i = 0; run && i < state.maxMessages; i++) {
831
+ /*
832
+ * Produce message
833
+ */
834
+ std::ostringstream msg;
835
+ msg << value_prefix << i;
836
+ while (true) {
837
+ RdKafka::ErrorCode resp;
838
+ if (create_time == -1) {
839
+ resp = producer->produce(
840
+ topic, partition,
841
+ RdKafka::Producer::RK_MSG_COPY /* Copy payload */,
842
+ const_cast<char *>(msg.str().c_str()), msg.str().size(), NULL,
843
+ NULL);
844
+ } else {
845
+ resp = producer->produce(
846
+ topics[0], partition,
847
+ RdKafka::Producer::RK_MSG_COPY /* Copy payload */,
848
+ const_cast<char *>(msg.str().c_str()), msg.str().size(), NULL, 0,
849
+ create_time, NULL);
850
+ }
851
+
852
+ if (resp == RdKafka::ERR__QUEUE_FULL) {
853
+ producer->poll(100);
854
+ continue;
855
+ } else if (resp != RdKafka::ERR_NO_ERROR) {
856
+ errorString("producer_send_error", RdKafka::err2str(resp),
857
+ topic->name(), NULL, msg.str());
858
+ state.producer.numErr++;
859
+ } else {
860
+ state.producer.numSent++;
861
+ }
862
+ break;
863
+ }
864
+
865
+ producer->poll(delay_us / 1000);
866
+ usleep(1000);
867
+ watchdog_kick();
868
+ }
869
+ run = 1;
870
+
871
+ while (run && producer->outq_len() > 0) {
872
+ std::cerr << now() << ": Waiting for " << producer->outq_len()
873
+ << std::endl;
874
+ producer->poll(1000);
875
+ watchdog_kick();
876
+ }
877
+
878
+ std::cerr << now() << ": " << state.producer.numAcked << "/"
879
+ << state.producer.numSent << "/" << state.maxMessages
880
+ << " msgs acked/sent/max, " << state.producer.numErr << " errored"
881
+ << std::endl;
882
+
883
+ delete topic;
884
+ delete producer;
885
+
886
+
887
+ } else if (mode == "C") {
888
+ /*
889
+ * Consumer mode
890
+ */
891
+
892
+ conf->set("auto.offset.reset", "smallest", errstr);
893
+
894
+ ExampleRebalanceCb ex_rebalance_cb;
895
+ conf->set("rebalance_cb", &ex_rebalance_cb, errstr);
896
+
897
+ conf->set("offset_commit_cb", &ex_offset_commit_cb, errstr);
898
+
899
+
900
+ /*
901
+ * Create consumer using accumulated global configuration.
902
+ */
903
+ consumer = RdKafka::KafkaConsumer::create(conf, errstr);
904
+ if (!consumer) {
905
+ std::cerr << now() << ": Failed to create consumer: " << errstr
906
+ << std::endl;
907
+ exit(1);
908
+ }
909
+
910
+ std::cerr << now() << ": % Created consumer " << consumer->name()
911
+ << std::endl;
912
+
913
+ /*
914
+ * Subscribe to topic(s)
915
+ */
916
+ RdKafka::ErrorCode resp = consumer->subscribe(topics);
917
+ if (resp != RdKafka::ERR_NO_ERROR) {
918
+ std::cerr << now() << ": Failed to subscribe to " << topics.size()
919
+ << " topics: " << RdKafka::err2str(resp) << std::endl;
920
+ exit(1);
921
+ }
922
+
923
+ watchdog_kick();
924
+
925
+ /*
926
+ * Consume messages
927
+ */
928
+ while (run) {
929
+ RdKafka::Message *msg = consumer->consume(500);
930
+ msg_consume(consumer, msg, NULL);
931
+ delete msg;
932
+ watchdog_kick();
933
+ }
934
+
935
+ std::cerr << now() << ": Final commit on termination" << std::endl;
936
+
937
+ /* Final commit */
938
+ do_commit(consumer, 1);
939
+
940
+ /*
941
+ * Stop consumer
942
+ */
943
+ consumer->close();
944
+
945
+ delete consumer;
946
+ }
947
+
948
+ std::cout << "{ \"name\": \"shutdown_complete\" }" << std::endl;
949
+
950
+ /*
951
+ * Wait for RdKafka to decommission.
952
+ * This is not strictly needed (when check outq_len() above), but
953
+ * allows RdKafka to clean up all its resources before the application
954
+ * exits so that memory profilers such as valgrind wont complain about
955
+ * memory leaks.
956
+ */
957
+ RdKafka::wait_destroyed(5000);
958
+
959
+ std::cerr << now() << ": EXITING WITH RETURN VALUE 0" << std::endl;
960
+ return 0;
961
+ }