Kafka的简介与安装配置以及简单使用

1、Kafka简介

1.1、什么是Kafka

Apache Kafka是分布式发布-订阅消息系统(消息中间件)。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。

1.2 、Apache Kafka与传统消息系统相比,有以下不同:

1.它是分布式系统,易于向外扩展;

2.它同时为发布和订阅提供高吞吐量;

3.它支持多订阅者,当失败时能自动平衡消费者;

4.它将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。

1.3、Kafka术语

术语

解释

Broker

Kafka集群包含一个或多个服务器,这种服务器被称为broker

Topic

 

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

Partition

Partition是物理上的概念,每个Topic包含一个或多个Partition.

Producer

负责发布消息到Kafka broker

Consumer

消息消费者,向Kafka broker读取消息的客户端

Consumer Group

每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)

replica

partition 的副本,保障 partition 的高可用

leader

replica 中的一个角色, producer 和 consumer 只跟 leader 交互

follower

replica 中的一个角色,从 leader 中复制数据

controller

Kafka 集群中的其中一个服务器,用来进行 leader election 以及各种 failover


2、Kafka的安装

2.1 下载

下载官网 :http://kafka.apache.org/downloads.html

以0.10.2.1为例。Kafka是用Scala开发的,所以下载时下载自己电脑上安装的Scala的对应的版本。

2.2 上传到Linux并解压

scp -r /usr/local/kafka_2.11-0.10.2.1/ hadoop02:/usr/local/

2.3 修改配置文件

broker.id=0
listeners=PLAINTEXT://hadoop01:9092
log.dirs=/usr/local/kafka_2.11-0.10.2.1/data
num.partitions=3
zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181

2.4 分发

scp -r kafka_2.11-0.10.2.1/ hadoop02:/usr/local/

scp -r kafka_2.11-0.10.2.1/ hadoop03:/opt/local/

scp -r kafka_2.11-0.10.2.1/ hadoop04:/opt/local/

2.5 修改配置文件

详细配置文件说明参见文章(https://blog.csdn.net/weixin_35353187/article/details/82993955

修改hadoop02:
       broker.id=1
       listeners=PLAINTEXT://hadoop02:9092

修改hadoop03:
       broker.id=2
       listeners=PLAINTEXT://hadoop03:9092

修改hadoop04:
       broker.id=3
       listeners=PLAINTEXT://hadoop04:9092

2.6 启动Kafka

启动Kafka之前,必须保证zookeeper是启动的

kafka-server-start.sh -daemon /usr/local/kafka_2.11-0.10.2.1/config/server.properties


3、测试集群

3.1、进入kafka根目录,创建Topic名称为: test的主题

kafka-topics.sh --create --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --replication-factor 3 --partitions 3 --topic test

3.2、列出已创建的topic列表

kafka-topics.sh --list --zookeeper hadoop01:2181

3.3、查看Topic的详细信息

kafka-topics.sh --describe --zookeeper hadoop01:2181 --topic test

第一行是对所有分区的一个描述,然后每个分区对应一行。

leader:负责处理消息的读和写,leader是从所有节点中随机选择的.

replicas:列出了所有的副本节点,不管节点是否在服务中.

isr:是正在服务中的节点.  

isr: In-Sync Replicas   可以提供服务的副本

3.4、模拟客户端去发送消息(生产者)

kafka-console-producer.sh --broker-list hadoop01:9092,hadoop02:9092 --topic hellotopic

3.5、模拟客户端去接受消息  (消费者)

连接broker的地址 :kafka-console-consumer.sh --bootstrap-server hadoop03:9092 --from-beginning --topic hellotopic

3.6、测试一下容错能力.

首先查看Topic的详细信息,发现Partition0的Leader为2

这里的Leader为2代表的是hadoop03这台机器

在hadoop03机器上关掉kafka进程

再次查看Topic详细信息,发现Partition0的Leader由2变为3,3为hadoop04机器

Kill -9 pid[leader节点]

另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中:

kafka-topics.sh --describe --zookeeper localhost:2181 --topic test


        Topic: test     Partition: 0    Leader: 2       Replicas: 2,3,0 Isr: 2,3,0
        Topic: test     Partition: 1    Leader: 3       Replicas: 3,0,1 Isr: 3,0,1
        Topic: test     Partition: 2    Leader: 0       Replicas: 0,1,2 Isr: 0,2,1


        Topic: test     Partition: 0    Leader: 3       Replicas: 2,3,0 Isr: 3,0
        Topic: test     Partition: 1    Leader: 3       Replicas: 3,0,1 Isr: 3,0,1
        Topic: test     Partition: 2    Leader: 0       Replicas: 0,1,2 Isr: 0,1


虽然最初负责续写消息的leader down掉了,但之前的消息还是可以消费的:

kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic test

3.7、注:如果再次启动hadoop03(即Leader2所在的机器)上的kafka服务,Leader还会变回去,不过需要一定的时间

重新启动hadoop03上的kafka服务

再次查看Topic的详细信息,会发现Leader变回了2,自动进行了均衡。Isr(正在服务中的节点)也增加了2

3.8、扩展:从头消费,指定分区消费

生产者在生产数据的时候,默认会平均写到不同的分区中去。

--from-beginning参数意为从头开始消费

生产数据的时候,是有序的,但是消费数据的时候,会发现是无需的,这是因为在生产数据的时候,默认会平均写到不同的分区中去的。消费数据的时候,分区内的数据是有序的,但是分区间的数据,是无序的。

可以通过-partition来指定消费某一个分区的数据。

kafka-console-consumer.sh --bootstrap-server hadoop03:9092 --from-beginning --topic hellotopic --partition 0

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值