Kafka集群环境搭建

时间:2022-12-13 09:26:24

Kafka介绍

在流式计算中,Kafka一般用来缓存数据Storm通过消费Kafka的数据进行计算。

KAFKA + STORM +REDIS

1、Apache Kafka是一个开源消息系统,用Scala写成。

2、Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。

3、Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接收者成为Consumer,此外Kafka集群由多个Kafka实例组成,每个实例(server)称为broker。

4、无论是kafka集群,还是Producer和Consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。

 

Kafka 是一个基于分布式的消息发布-订阅系统,它被设计成快速、可扩展的、持久的。与其他消息发布-订阅系统类似,Kafka 在主题当中保存消息的信息。

生产者向主题写入数据,消费者从主题读取数据。由于 Kafka 的特性是支持分布式,同时也是基于分布式的,所以主题也是可以在多个节点上被分区和覆盖的。

Kafka 的生产者负责在消息队列中对生产出来的消息保证一定时间的占有,消费者负责追踪每一个主题 (可以理解为一个日志通道) 的消息并及时获取它们。

 

Kafka核心组件

Topic :消息根据Topic进行归类

Producer:发送消息者,向broker发布消息

Consumer:消息消费者,从Kafka broker中读取消息的客户端

broker:每个kafka实例(server)。Kafka集群中包含一个或多个服务器,这个服务器称为broker

Zookeeper:依赖集群保存meta信息。Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance

Kafka集群环境搭建

 

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

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

 

Kafka拓扑结构:

Kafka集群环境搭建

 

 

Kafka集群部署(前提:先部署好zookeeper集群)

1、下载安装包

http://kafka.apache.org/

2、上传并解压安装包

tar  -zxvf  /root/kafka_2.11-0.8.2.2.tgz  -C  /export/servers/

cd  /export/servers/

ln -s  kafka_2.11-0.8.2.2  kafka

3、修改配置文件

vi  /export/servers/kafka/config/server.properties

配置一下内容:

Kafka集群环境搭建

4、分发安装包

scp -r /export/servers/kafka_2.11-0.8.2.2  storm2:/export/servers

scp -r /export/servers/kafka_2.11-0.8.2.2  storm3:/export/servers

然后分别在各机器上创建软连

cd /export/servers/

ln -s kafka_2.11-0.8.2.2 kafka

5、再次修改配置文件(重要)

依次修改各服务器上配置文件的broker.id,分别是0,1,2,不得重复!

6、启动集群(先启动zookeeper集群)

依次在每个节点上的/kafka/路径下启动Kafka:

bin/kafka-server-start.sh  config/server.properties

Kafka集群环境搭建

Kafka集群环境搭建

Kafka集群环境搭建

 

Kafka常用操作命令

  • 查看当前服务器中的所有topic

bin/kafka-topics.sh --list --zookeeper  zk01:2181

  • 创建topic

./kafka-topics.sh --create --zookeeper mini1:2181 --replication-factor 1 --partitions 3 --topic first

  • 删除topic

sh bin/kafka-topics.sh --delete --zookeeper zk01:2181 --topic test

需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启。

  • 通过shell命令发送消息

kafka-console-producer.sh --broker-list kafka01:9092 --topic itheima

  • 通过shell消费消息

sh bin/kafka-console-consumer.sh --zookeeper zk01:2181 --from-beginning --topic test1

  • 查看消费位置

sh kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper zk01:2181 --group testGroup

  • 查看某个Topic的详情

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