{"id":6257,"date":"2022-11-18T14:59:32","date_gmt":"2022-11-18T13:59:32","guid":{"rendered":"https:\/\/kabisa.nl\/?p=6257"},"modified":"2023-10-24T12:29:10","modified_gmt":"2023-10-24T10:29:10","slug":"using-the-java-kinesis-producer-library-kpl-with-localstack","status":"publish","type":"post","link":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/","title":{"rendered":"Using the Java Kinesis Producer Library (KPL) with LocalStack"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"6257\" class=\"elementor elementor-6257\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fc2cedf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fc2cedf\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a6f674d\" data-id=\"a6f674d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a93ed61 elementor-widget elementor-widget-text-editor\" data-id=\"a93ed61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Yes! LocalStack, as you know I\u2019m a\u00a0<strong>huge<\/strong>\u00a0fan; being able to run AWS Cloud Services locally is a great way to help test systems that heavily rely on them. Not a fan yet? No worries there\u2019s still time, have a look at their website: https:\/\/localstack.cloud\/.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a0a3fda elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a0a3fda\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0994c9b\" data-id=\"0994c9b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f7296ba elementor-widget elementor-widget-text-editor\" data-id=\"f7296ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Only interested in the code? A complete working example is available on\u00a0<a href=\"https:\/\/github.com\/VR4J\/kinesis-producer-library-localstack\">Github<\/a>.<\/p><h2 id=\"introduction\">Introduction<\/h2><p>Part of the reason Kinesis is so great, is that it is very accessible, either by a few clicks in the AWS Console, or the use of the AWS SDK. The latter however is sometimes a bit of a handful to get setup, but once done the many abstraction layers like the Kinesis Producer Library will give you a lot of \u2018free\u2019 configuration options, and default implementations. We can think of sending messages in batches based on the batch size, or the batch count, preventing our system to send enormous amounts of data over the line in one request.<\/p><p>The Kinesis Producer Library will not work out of the box with LocalStack, but luckily we can fix this with just a few subtle changes.<\/p><p>Ready? Let\u2019s dive into it!<\/p><h2 id=\"running-localstack\">Running LocalStack<\/h2><p>LocalStack offers us a Docker image with which we can simply run the necessary AWS services locally<\/p><div class=\"highlight\"><pre class=\"highlight shell\"><code><\/code><\/pre><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-753a525 elementor-widget elementor-widget-code-highlight\" data-id=\"753a525\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-markup line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-markup\">\n\t\t\t\t\t<xmp>docker run --rm -it -e SERVICES=kinesis,cloudwatch,dynamodb -p 4566:4566 -p 4510-4559:4510-4559 localstack\/localstack\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bee1514 elementor-widget elementor-widget-text-editor\" data-id=\"bee1514\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>More info about this command can be found on the documentation page: <a href=\"https:\/\/docs.localstack.cloud\/get-started\/#docker\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.localstack.cloud\/get-started\/#docker<\/a><\/p><p>When our container is up and running we can use the\u00a0<code>awslocal<\/code>\u00a0cli to create a Kinesis Stream.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d20a5d9 elementor-widget elementor-widget-code-highlight\" data-id=\"d20a5d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-markup line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-markup\">\n\t\t\t\t\t<xmp>awslocal kinesis create-stream --stream-name some-data-stream --shard-count 2<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8e89d7c elementor-widget elementor-widget-text-editor\" data-id=\"8e89d7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"using-the-kinesis-producer-library-kpl\">Using the Kinesis Producer Library (KPL)<\/h2><p>When we add the Kinesis Producer Library in our Spring Boot application, we need to override a few properties to make sure it connects to our local container.<\/p><p>We can create the following configuration class.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-59e04c9 elementor-widget elementor-widget-code-highlight\" data-id=\"59e04c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-java line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-java\">\n\t\t\t\t\t<xmp>@Profile(\"localstack\")\n@Configuration\n@RequiredArgsConstructor\npublic class LocalStackClientConfiguration {\n\n    @Bean\n    public KinesisProducer kinesisProducer() {\n        KinesisProducerConfiguration configuration = new KinesisProducerConfiguration()\n            .setKinesisEndpoint(\"localhost\")\n            .setKinesisPort(4566)\n            .setCloudwatchEndpoint(\"localhost\")\n            .setCloudwatchPort(4566)\n            .setRegion(\"us-east-1\")\n\n        return new KinesisProducer(configuration);\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-28274c9 elementor-widget elementor-widget-text-editor\" data-id=\"28274c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Let\u2019s explain.<\/p><p>We add the\u00a0<code>@Profile(\"localstack\")<\/code>\u00a0annotation to make sure we only connect to our local container when we run our application with the\u00a0<code>localstack<\/code>\u00a0profile.<\/p><p>We override the endpoint and ports to match the ones exposed by our LocalStack container.<\/p><p>Since LocalStack by default registers all resources in the\u00a0<strong>us-east-1<\/strong>\u00a0region, we override it to make sure our stream can be found.<\/p><p>Sounds good? Let\u2019s try and send a message to our stream.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-de0aee4 elementor-widget elementor-widget-code-highlight\" data-id=\"de0aee4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-java line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-java\">\n\t\t\t\t\t<xmp>@Component\n@RequiredArgsConstructor\npublic class KinesisSender {\n\n    private final KinesisProducer producer;\n\n    @PostConstruct\n    public void run() {\n        ByteBuffer payload = ByteBuffer.wrap(\"{ 'data': 'Something important.' }\".getBytes(StandardCharsets.UTF_8));\n        producer.addUserRecord(\"some-data-stream\", \"partitionKey\", payload).get();\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cfb480c elementor-widget elementor-widget-text-editor\" data-id=\"cfb480c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Oh oh..<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-143c603 elementor-widget elementor-widget-code-highlight\" data-id=\"143c603\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-markup line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-markup\">\n\t\t\t\t\t<xmp>libc++abi: terminating with uncaught exception of type boost::wrapexcept<boost::exception_detail::error_info_injector<boost::log::v2s_mt_posix::system_error> >: Failed to set TLS value: Invalid argument [system:22]\n\njava.lang.RuntimeException: Child process exited with code 134\n    at com.amazonaws.services.kinesis.producer.Daemon.fatalError(Daemon.java:532) ~[amazon-kinesis-producer-0.14.13.jar:na]\n    at com.amazonaws.services.kinesis.producer.Daemon.fatalError(Daemon.java:508) ~[amazon-kinesis-producer-0.14.13.jar:na]\n    at com.amazonaws.services.kinesis.producer.Daemon.startChildProcess(Daemon.java:486) ~[amazon-kinesis-producer-0.14.13.jar:na]\n    at com.amazonaws.services.kinesis.producer.Daemon.access$100(Daemon.java:61) ~[amazon-kinesis-producer-0.14.13.jar:na]\n    at com.amazonaws.services.kinesis.producer.Daemon$1.run(Daemon.java:130) ~[amazon-kinesis-producer-0.14.13.jar:na]\n    at java.base\/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]\n    at java.base\/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]\n    at java.base\/java.lang.Thread.run(Thread.java:833) ~[na:na]<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7356bbd elementor-widget elementor-widget-text-editor\" data-id=\"7356bbd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>And this is suppose to help us how?<\/p><p>Well, what they don\u2019t tell you, is that\u00a0<strong>the Kinesis Producer Library (KPL) only works over https<\/strong>. Which means that it cannot connect to our local container on the plain http port (:4566).<\/p><p>Luckily LocalStack also exposes our AWS services on an https port (:4567), but we still need to re-run our docker container also exposing that port to the host.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f0678bc elementor-widget elementor-widget-code-highlight\" data-id=\"f0678bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-markup line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-markup\">\n\t\t\t\t\t<xmp>docker run --rm -it -e SERVICES=kinesis,cloudwatch,dynamodb -p 4566:4566 -p 4567:4567 -p 4510-4559:4510-4559 localstack\/localstack\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b01deb7 elementor-widget elementor-widget-text-editor\" data-id=\"b01deb7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Alright, so with that done we can change our configuration class.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9db5e8 elementor-widget elementor-widget-code-highlight\" data-id=\"d9db5e8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-java line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-java\">\n\t\t\t\t\t<xmp>@Profile(\"localstack\")\n@Configuration\n@RequiredArgsConstructor\npublic class LocalStackClientConfiguration {\n\n    @Bean\n    public KinesisProducer kinesisProducer() {\n        KinesisProducerConfiguration configuration = new KinesisProducerConfiguration()\n            .setKinesisEndpoint(\"localhost\")\n            .setKinesisPort(4567)\n            .setCloudwatchEndpoint(\"localhost\")\n            .setCloudwatchPort(4567)\n            .setVerifyCertificate(false)\n            .setRegion(\"us-east-1\");\n\n        return new KinesisProducer(configuration);\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11a0db6 elementor-widget elementor-widget-text-editor\" data-id=\"11a0db6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Notice that we also have to set the\u00a0<code>setVerifyCertificate()<\/code>\u00a0to\u00a0<code>false<\/code>\u00a0since we are connecting locally, and the certificate will not be valid.<\/p><p>When we try and run our program again, we see no errors and all our messages are being sent! \ud83c\udf89<\/p><p>That\u2019s all folks! \ud83d\udc4b<\/p><p>As always you can find the complete source on\u00a0<a href=\"https:\/\/github.com\/VR4J\/kinesis-producer-library-localstack\">Github<\/a>.<\/p><h2 id=\"credits\">Credits<\/h2><p>Special thanks to\u00a0<strong>Mees van Straten<\/strong>\u00a0for pointing out the difficulty of connecting the Kinesis Producer Library to LocalStack.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Yes! LocalStack, as you know I\u2019m a\u00a0huge\u00a0fan; being able to run AWS Cloud Services locally is a great way to help test systems that heavily rely on them. Not a fan yet? No worries there\u2019s still time, have a look at their website: https:\/\/localstack.cloud\/. Only interested in the code? A complete working example is available [&hellip;]<\/p>\n","protected":false},"author":18,"featured_media":6488,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[149],"tags":[],"class_list":["post-6257","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Using the Java Kinesis Producer Library (KPL) with LocalStack | Kabisa Software Artisans<\/title>\n<meta name=\"description\" content=\"Yes! LocalStack, as you know I\u2019m a\u00a0huge\u00a0fan; being able to run AWS Cloud Services locally is a great way to help test systems that heavily rely on them.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using the Java Kinesis Producer Library (KPL) with LocalStack | Kabisa Software Artisans\" \/>\n<meta property=\"og:description\" content=\"Yes! LocalStack, as you know I\u2019m a\u00a0huge\u00a0fan; being able to run AWS Cloud Services locally is a great way to help test systems that heavily rely on them.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/\" \/>\n<meta property=\"og:site_name\" content=\"Kabisa Software Artisans\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kabisaict\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-18T13:59:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-24T10:29:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/11\/using-the-java-kinesis-client-library-kcl-with-localstack-social-kabisa2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"618\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joery Vreijsen\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joery Vreijsen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using the Java Kinesis Producer Library (KPL) with LocalStack | Kabisa Software Artisans","description":"Yes! LocalStack, as you know I\u2019m a\u00a0huge\u00a0fan; being able to run AWS Cloud Services locally is a great way to help test systems that heavily rely on them.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/","og_locale":"en_US","og_type":"article","og_title":"Using the Java Kinesis Producer Library (KPL) with LocalStack | Kabisa Software Artisans","og_description":"Yes! LocalStack, as you know I\u2019m a\u00a0huge\u00a0fan; being able to run AWS Cloud Services locally is a great way to help test systems that heavily rely on them.","og_url":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/","og_site_name":"Kabisa Software Artisans","article_publisher":"https:\/\/www.facebook.com\/kabisaict","article_published_time":"2022-11-18T13:59:32+00:00","article_modified_time":"2023-10-24T10:29:10+00:00","og_image":[{"width":1200,"height":618,"url":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/11\/using-the-java-kinesis-client-library-kcl-with-localstack-social-kabisa2.png","type":"image\/png"}],"author":"Joery Vreijsen","twitter_misc":{"Written by":"Joery Vreijsen","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#article","isPartOf":{"@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/"},"author":{"name":"Joery Vreijsen","@id":"https:\/\/kabisa.nl\/en\/#\/schema\/person\/3d01a54b19b4bb85caf102f201ae600a"},"headline":"Using the Java Kinesis Producer Library (KPL) with LocalStack","datePublished":"2022-11-18T13:59:32+00:00","dateModified":"2023-10-24T10:29:10+00:00","mainEntityOfPage":{"@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/"},"wordCount":527,"commentCount":0,"publisher":{"@id":"https:\/\/kabisa.nl\/en\/#organization"},"image":{"@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#primaryimage"},"thumbnailUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/11\/using-the-java-kinesis-client-library-kcl-with-localstack-social-kabisa2.png","articleSection":["Tech blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/","url":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/","name":"Using the Java Kinesis Producer Library (KPL) with LocalStack | Kabisa Software Artisans","isPartOf":{"@id":"https:\/\/kabisa.nl\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#primaryimage"},"image":{"@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#primaryimage"},"thumbnailUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/11\/using-the-java-kinesis-client-library-kcl-with-localstack-social-kabisa2.png","datePublished":"2022-11-18T13:59:32+00:00","dateModified":"2023-10-24T10:29:10+00:00","description":"Yes! LocalStack, as you know I\u2019m a\u00a0huge\u00a0fan; being able to run AWS Cloud Services locally is a great way to help test systems that heavily rely on them.","breadcrumb":{"@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#primaryimage","url":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/11\/using-the-java-kinesis-client-library-kcl-with-localstack-social-kabisa2.png","contentUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/11\/using-the-java-kinesis-client-library-kcl-with-localstack-social-kabisa2.png","width":1200,"height":618},{"@type":"BreadcrumbList","@id":"https:\/\/kabisa.nl\/en\/tech\/using-the-java-kinesis-producer-library-kpl-with-localstack\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kabisa.nl\/en\/"},{"@type":"ListItem","position":2,"name":"Tech blog","item":"https:\/\/kabisa.nl\/en\/tech\/"},{"@type":"ListItem","position":3,"name":"Using the Java Kinesis Producer Library (KPL) with LocalStack"}]},{"@type":"WebSite","@id":"https:\/\/kabisa.nl\/en\/#website","url":"https:\/\/kabisa.nl\/en\/","name":"Kabisa Software Artisans","description":"Mission-critical Software for Hightech, Fintech &amp; E-commerce","publisher":{"@id":"https:\/\/kabisa.nl\/en\/#organization"},"alternateName":"Kabisa","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kabisa.nl\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/kabisa.nl\/en\/#organization","name":"Cloud Legends","alternateName":"Kabisa","url":"https:\/\/kabisa.nl\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kabisa.nl\/en\/#\/schema\/logo\/image\/","url":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/12\/kabisa-favicon.png","contentUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/12\/kabisa-favicon.png","width":512,"height":512,"caption":"Cloud Legends"},"image":{"@id":"https:\/\/kabisa.nl\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kabisaict","https:\/\/x.com\/kabisasoftware"],"description":"Software Development is onze core-business. Kabisa ontwikkelt innovatieve maatwerk software die naadloos aansluit bij de behoeftes van klanten en eindgebruikers. Dat doen we in nauwe samenwerking in elke fase van het proces: co-creatie noemen we dat.","email":"info@kabisa.nl","telephone":"0495 430 798","legalName":"Kabisa B.V.","foundingDate":"2006-01-01","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"51","maxValue":"200"}},{"@type":"Person","@id":"https:\/\/kabisa.nl\/en\/#\/schema\/person\/3d01a54b19b4bb85caf102f201ae600a","name":"Joery Vreijsen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a7fd899168ff4d848ffd6f23a537957c9f47914239de9482363b0b2d45b4af2f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a7fd899168ff4d848ffd6f23a537957c9f47914239de9482363b0b2d45b4af2f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a7fd899168ff4d848ffd6f23a537957c9f47914239de9482363b0b2d45b4af2f?s=96&d=mm&r=g","caption":"Joery Vreijsen"}}]}},"_links":{"self":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts\/6257","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/comments?post=6257"}],"version-history":[{"count":11,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts\/6257\/revisions"}],"predecessor-version":[{"id":6269,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts\/6257\/revisions\/6269"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/media\/6488"}],"wp:attachment":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/media?parent=6257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/categories?post=6257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/tags?post=6257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}