﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JAVA-文章分类-消息中间件</title><link>http://www.blogjava.net/zzzlyr/category/55322.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 01 Dec 2018 00:37:17 GMT</lastBuildDate><pubDate>Sat, 01 Dec 2018 00:37:17 GMT</pubDate><ttl>60</ttl><item><title>创建多线程Apache Kafka消费者</title><link>http://www.blogjava.net/zzzlyr/articles/433530.html</link><dc:creator>张钊钊</dc:creator><author>张钊钊</author><pubDate>Fri, 30 Nov 2018 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/zzzlyr/articles/433530.html</guid><wfw:comment>http://www.blogjava.net/zzzlyr/comments/433530.html</wfw:comment><comments>http://www.blogjava.net/zzzlyr/articles/433530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zzzlyr/comments/commentRss/433530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zzzlyr/services/trackbacks/433530.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.为什么我们需要多线程消费者模型？假设我们实现了一个通知模块，允许用户订阅来自其他用户，其他应用程序的通知。我们的模块读取将由其他用户，应用程序写入Kafka集群的消息。在这种情况下，我们可以获得写入Kafka主题的其他人的所有通知，我们的模块将创建一个消费者来订阅该主题。一开始似乎一切都很好。但是，如果其他应用程序，用户...产生的通知数量快速增加并超过我们模块可以处理的速率，会发生什么？好吧...&nbsp;&nbsp;<a href='http://www.blogjava.net/zzzlyr/articles/433530.html'>阅读全文</a><img src ="http://www.blogjava.net/zzzlyr/aggbug/433530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zzzlyr/" target="_blank">张钊钊</a> 2018-11-30 18:26 <a href="http://www.blogjava.net/zzzlyr/articles/433530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>kafka 开发遇到的坑解决方法</title><link>http://www.blogjava.net/zzzlyr/articles/433529.html</link><dc:creator>张钊钊</dc:creator><author>张钊钊</author><pubDate>Fri, 30 Nov 2018 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/zzzlyr/articles/433529.html</guid><wfw:comment>http://www.blogjava.net/zzzlyr/comments/433529.html</wfw:comment><comments>http://www.blogjava.net/zzzlyr/articles/433529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zzzlyr/comments/commentRss/433529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zzzlyr/services/trackbacks/433529.html</trackback:ping><description><![CDATA[以前一直没有接触过kafka 消息中间件，现在公司要用它来做消息服务(sub/pub),安装都不多说了 主要是开发的时候遇到问题和解决方法：<br />
<br />
版本: zookeeper-3.4.12.tar.gz&nbsp; kafka_2.12-2.1.0.tgz&nbsp; 连接工具: kafkatool_64bit.exe&nbsp; &nbsp;集成: spring boot&nbsp;<br />
<br />
pom.xml:<br />
<br />
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;groupId&gt;org.apache.kafka&lt;/groupId&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;artifactId&gt;kafka_2.12&lt;/artifactId&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;version&gt;1.0.0&lt;/version&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/dependency&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;dependency&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;groupId&gt;org.apache.kafka&lt;/groupId&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;artifactId&gt;kafka-clients&lt;/artifactId&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;version&gt;2.1.0&lt;/version&gt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/dependency&gt;<br />
<br />
程序就集成：<br />
<br />
<div>
<div>&nbsp; &nbsp; @Bean</div>
<div>&nbsp; &nbsp; @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)</div>
<div>&nbsp; &nbsp; public KafkaConsumer&lt;String, String&gt; getKafkaConsumer() {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; return new KafkaConsumer&lt;String, String&gt;(consumerConfigs());</div>
<div>&nbsp; &nbsp; }</div>
</div>
<br />
&nbsp;问题就在这里&nbsp; KafkaConsumer 是让spring IOC来管理，刚刚开始只有@Bean 生成的对象实例就只有一个，但是在启动线程消息的时候只能一个对象一个线程，如果一个对象在启用线程去消费会报&nbsp;&nbsp;<span style="font-size: 12pt;">KafkaConsumer is not safe for multi-threaded access</span>
<h1><span style="font-weight: normal;"></span></h1>
<span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;">解决办法：</span><br style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word; color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;" />
<span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;">1.线程与KafkaConsumer对象实例的对应关系是1：1</span><br style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word; color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;" />
<span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;">2.要保证线程与KafkaConsumer对象的关系是固定不变的，也就是说，一个线程始终都只能操作同一个KafkaConsumer对象且一个KafkaConsumer对象始终是由同一个线程来操作的 所以在 @Bean 又加了&nbsp;</span>&nbsp;@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS) 来每一次用生成一个新实例对象&nbsp;<br />
<br />
2：问题&nbsp;<span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;">线程与KafkaConsumer对象实例的对应关系是1：1&nbsp; ，但订阅的对对象 和线程使用poll&nbsp;&nbsp;</span><span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;">KafkaConsumer&nbsp;</span><span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;">对象又会发生变化导致监听消费报错<br />
</span>&nbsp; &nbsp; Consumer is not subscribed to any topics or assigned any partitions，为什么会报没有定阅呢，明明已经定阅了<br />
&nbsp;<br />&nbsp; &nbsp;解决办法不要让spring IOC 来管理<span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;">KafkaConsumer 生成实例对象&nbsp; 使用new 方式生成。<br /><br /></span>看来了解下原理是很重要的以下是比较不错的文章(里边还有多线程消费源码和原理讲解)<br /><br /><div><a href="https://howtoprogram.xyz/2016/05/29/create-multi-threaded-apache-kafka-consumer/">https://howtoprogram.xyz/2016/05/29/create-multi-threaded-apache-kafka-consumer/</a></div><br /><div><a href="https://github.com/howtoprogram/Kafka-MultiThread-Java-Example">https://github.com/howtoprogram/Kafka-MultiThread-Java-Example</a>&nbsp;</div>
<br /><span style="color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;"><br />
</span></div><img src ="http://www.blogjava.net/zzzlyr/aggbug/433529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zzzlyr/" target="_blank">张钊钊</a> 2018-11-30 16:05 <a href="http://www.blogjava.net/zzzlyr/articles/433529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>