1 概述
官网:https://kafka.apache.org/
1.1 定义
Kafka是一个分布式
基于发布/订阅模式
的消息队列
(Message Queue),主要应用于大数据实时处理领域。
1.2 消息队列
1.2.1 好处
(1)解耦:允许独立扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
(2)可恢复性:系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统回复后被处理。
(3)缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
(4)灵活性 和 峰值 处理能力:在流量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量不常见。如果为能以处理这类峰值访问为标准来投入资源随时待命无疑是巨大浪费。使用消息队列能够使关键组件顶住突发的访问能力,而不会因为突发的超负荷的请求而完全崩溃。
1.2.2 两种模式
(1)点对点模式 (一对一,消费者主动拉取数据,消息收到后消息清除)
消息生产者生产消息发送到Queue中,然后消费者从Queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。

(2)发布/订阅模式(一对多,消费者消费数据之后不会清除消息)
消费生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅这消费。

1.3 Kafka 基础架构
-
Producer:消息生产者,就是kafka broker发消息的客户端。
-
Consumer:消息消费者,向kafka broker取消息的客户端。
-
Consumer Group(CG):消费者组,由多个consumer组成。消费者
-
Topic:可以理解为一个队列,生产生和消费者面向的都是一个topic。
-
Partition:为了实现扩展性,一个非常强大的topic可以分布到多个broker(即服务器上),一个个topic可以分为多个partition,每个parttion是一个有序的队列。
-
Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。
-
leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。
-
follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。
2 Kafka快速入门
2.1 安装部署
下载:https://dlcdn.apache.org/kafka
- 解压
tar -xzf kafka_2.13-3.2.0.tgz
cd kafka_2.13-3.2.0
- 启动Kafka环境
注:本地环境必须安装 Java 8+
# Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
bin/zookeeper-server-start.sh config/zookeeper.properties
参考地址:
https://www.bilibili.com/video/BV1a4411B7V9
https://kafka.apache.org/documentation/#quickstart
<h2><a id="1__0"></a>1 概述</h2>
<p>官网:https://kafka.apache.org/</p>
<h3><a id="11__4"></a>1.1 定义</h3>
<p>Kafka是一个<code>分布式</code>基于<code>发布/订阅模式</code>的<code>消息队列</code>(Message Queue),主要应用于大数据实时处理领域。</p>
<h2><a id="12__7"></a>1.2 消息队列</h2>
<h3><a id="121__9"></a>1.2.1 好处</h3>
<p>(1)解耦:允许独立扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。</p>
<p>(2)可恢复性:系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统回复后被处理。</p>
<p>(3)缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。</p>
<p>(4)灵活性 和 峰值 处理能力:在流量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量不常见。如果为能以处理这类峰值访问为标准来投入资源随时待命无疑是巨大浪费。使用消息队列能够使关键组件顶住突发的访问能力,而不会因为突发的超负荷的请求而完全崩溃。</p>
<h3><a id="122__19"></a>1.2.2 两种模式</h3>
<p><strong>(1)点对点模式</strong> (一对一,消费者主动拉取数据,消息收到后消息清除)</p>
<p>消息生产者生产消息发送到Queue中,然后消费者从Queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。</p>
<p><img src="https://static.couragesteak.com/article/7563aca39f3b580682aba5a04f29cace.png" alt="image.png" /></p>
<p><strong>(2)发布/订阅模式</strong>(一对多,消费者消费数据之后不会清除消息)</p>
<p>消费生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅这消费。</p>
<p><img src="https://static.couragesteak.com/article/f7d7cbb98a2d34b2ca9ec7dfb8d0419a.png" alt="image.png" /></p>
<h2><a id="13_Kafka__34"></a>1.3 Kafka 基础架构</h2>
<ol>
<li>
<p>Producer:消息生产者,就是kafka broker发消息的客户端。</p>
</li>
<li>
<p>Consumer:消息消费者,向kafka broker取消息的客户端。</p>
</li>
<li>
<p>Consumer Group(CG):消费者组,由多个consumer组成。消费者</p>
</li>
<li>
<p>Topic:可以理解为一个队列,生产生和消费者面向的都是一个topic。</p>
</li>
<li>
<p>Partition:为了实现扩展性,一个非常强大的topic可以分布到多个broker(即服务器上),一个个topic可以分为多个partition,每个parttion是一个有序的队列。</p>
</li>
<li>
<p>Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。</p>
</li>
<li>
<p>leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。</p>
</li>
<li>
<p>follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。</p>
</li>
</ol>
<h2><a id="2_Kafka_46"></a>2 Kafka快速入门</h2>
<h3><a id="21__48"></a>2.1 安装部署</h3>
<p>下载:<a href="https://dlcdn.apache.org/kafka" target="_blank">https://dlcdn.apache.org/kafka</a></p>
<ol>
<li>解压</li>
</ol>
<pre><div class="hljs"><code class="lang-shell">tar -xzf kafka_2.13-3.2.0.tgz
cd kafka_2.13-3.2.0
</code></div></pre>
<ol start="2">
<li>启动Kafka环境</li>
</ol>
<p><code>注:本地环境必须安装 Java 8+</code></p>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta"># </span><span class="language-bash">Start the ZooKeeper service</span>
<span class="hljs-meta"># </span><span class="language-bash">Note: Soon, ZooKeeper will no longer be required by Apache Kafka.</span>
bin/zookeeper-server-start.sh config/zookeeper.properties
</code></div></pre>
<p>参考地址:<br />
https://www.bilibili.com/video/BV1a4411B7V9<br />
https://kafka.apache.org/documentation/#quickstart</p>
留言