源码先锋

源码先锋

Kafka最全详解(万字图文总结)

admin 81 74

大家好,我是mikechen。

Kafka是消息中间件的核心,也是大型架构、和高并发的必备中间件,本篇我就全面来详解Kafka@mikechen

Kafka

ApacheKafka是分布式发布-订阅消息系统,它最初由LinkedIn公司开发,之后成为Apache顶级项目。

Kafka是一个由Scala和Java编写的企业级的消息发布和订阅系统,主要应用场景有:日志收集系统和消息系统。

1.日志收集

一个公司可以用Kafka可以收集各种服务的log。

2.消息系统

解耦和生产者和消费者,这也是目前使用比较多的场景,相当于起了一个缓存消息的作用。

3.用户活动跟踪

4.运营指标

5.流式处理

比如:sparkstreaming和storm等。

Kafka原理

Kafka工作原理主要涉及消息生产、消息存储、以及消息消费等。

1.消息生产

我们将消息的发布(publish)称作producer。

2.消费消费

将消息的订阅(subscribe)表述为consumer。

3.broker(代理)

将中间的存储阵列称作broker(代理),这样就可以大致描绘出这样一个场面:

上图基本都是目前主流消息中间件的原型,可以很清楚的看见三者的关系。

生产者将数据生产出来,交给broker进行存储,如下图所示:

消费者需要消费数据了,就从broker中去拿出数据来,然后完成一系列对数据的处理操作。

备注:图上有个细节需要注意:producer到broker的过程是push也就是有数据就推送到broker,而consumer到broker的过程是pull是通过consumer主动去拉数据的。

Kafka使用zookeeper作为其分布式协调框架,很好的将消息生产、消息存储、消息消费的过程结合在一起。

如下图所示:

这样一个高性能的分布式消息发布订阅系统就完成了。

Kafka架构

它的架构包括以下组件:

1.话题(Topic)

消息的类别,主要用于对消息进行逻辑上的区分,每条发送到Kafka集群的消息都需要有一个指定的Topic,消费者根据Topic对指定的消息进行消费。

Kafka的数据就保存在Topic上,在每个broker上都可以创建多个Topic。

2.分区(Partition)

Topic的分区,每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量。

3.生产者(Producer)

Producer即消息的生产者,负责往Kafka集群中发送消息,是消息的入口。

4.服务代理(Broker)

Kafka集群中的服务实例,也称之为节点,每个Kafka集群包含一个或者多个Broker。

简单的理解就是一台Kafka服务器,KafkaCcluster表示集群的意思,也被称为代理(Broker)。

5.消费者(Consumer)

消息的消费者,主动从Kafka集群中拉取消息,比如:从Broker拉数据,从而消费这些已发布的消息。

Kafka集群

Kafka集群搭建安装从本质上来讲,由一套多节点Zookeeper集群和一套多节点Kafka集群搭建组成。

如下图所示:

Kafka集群搭建共依赖三部分内容:jdk,zookeeper,kafka。

多节点安装Kafka比只需要创建多份配置文件,然后指定他们启动kafka服务即可。

1.下载Kafka

wget

2.解压Kafka

tar-xvfkafka_2.13-2.5.0.tgz

3.修改配置文件

修改里面的,每台机器都不一样分别为:

=1=2=3

4.再修改里面的zookeeper的集群

=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181

5.依次启动kafka

bin//
Kafka实践

Kafka常用命令主要如下:

1.启动kafka服务

进入到kafkabin目录下,启动如下指令:

bin//

2.停止kafka服务

命令:

./

3.创建Topic

命令:

bin/:2181

参数说明:

--topic:后面的test0是topic的名称;--zookeeper:应该和文件中的一样;

4.查看所有的Topic列表

命令:

bin/:9092

5.查看所有的Topic的详细信息

命令:

bin/:2181/kafka如果要查看单个topic信息:可在上述命令后面添加--topictopicName。

6.查看Topic的分区和副本情况

命令:

bin/:2181--topictest0

运行结果:

Topic:test0PartitionCount:16ReplicationFactor:3Configs:Topic:test0Partition:0Leader:0Replicas:0,2,1Isr:1,0,2Topic:test0Partition:1Leader:1Replicas:1,2,0Isr:1,0,2Topic:test0Partition:2Leader:2Replicas:2,0,1Isr:1,0,2Topic:test0Partition:3Leader:1Replicas:1,2,0Isr:1,0,2Topic:test0Partition:4Leader:2Replicas:2,0,1Isr:1,0,2Topic:test0Partition:5Leader:0Replicas:0,1,2Isr:1,0,2

7.删除一个Topic

命令:

bin/:2181--topictest0

8.Kafka发送消息

命令:

./:9092--topictest

9.Kafka接收消息

命令:加了--from-beginning重头消费所有的消息

./:9092--topictest--from-beginning
命令:不加--from-beginning从最新的一条消息开始消费
./:9092--topictest

以上