Docker还能这样玩!Centos8镜像搭建kafka单机伪集群实战(超详细版)

一、kafka简介

Kafka 是一个分布式流平台(Apache Kafka® is a distributed streaming platform),最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

文档

http://kafka.apachecn.org/

http://kafka.apachecn.org/quickstart.html

http://kafka.apachecn.org/documentation.html

http://kafka.apache.org/documentation/

二、安装

这里我是直接进入的镜像,需要不知道怎么使用docker拉取镜像的,请看我上一篇文章,跳转链接如下:Docker 拉取centos8镜像创建3个互通的静态IP的容器以及映射IP实战

Step 1: 进入容器并且安装JDK
docker exec -it hadoop3 /bin/bash

这里我JDK版本是1.8,小伙伴们也可以自行下载其他版本

编辑/etc/profile文件,添加如下:

export JAVA_HOME=/opt/java/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

检查JDK是否安装成功:
在这里插入图片描述

Step 2: 下载kafka并且解压

下载地址:http://kafka.apachecn.org/downloads.html

扫描二维码关注公众号,回复: 12676926 查看本文章

在这里插入图片描述

tar -xzvf kafka_2.11-1.0.0.tgz
cd kafka_2.11-1.0.0
Step 3: 启动服务器

因为Kafka 需求使用 ZooKeeper 如果你还没有ZooKeeper服务器,你需要先启动一个ZooKeeper服务器。 您可以通过与kafka打包在一起的便捷脚本来快速简单地创建一个单节点ZooKeeper实例

启动zookeeper:

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

启动kafka:

bin/kafka-server-start.sh config/server.properties
Step 3: 设置多代理集群

对 Kafka来说,单个代理只是一个大小为一的集群,除了启动更多的代理实例外,没有什么变化。 为了深入了解它,让我们把集群扩展到三个节点(仍然在本地机器上)

cp ./config/server.properties ./config/server-1.properties
cp ./config/server.properties ./config/server-1.properties

我们需要编辑新文件修改以下地方
server-1.properties:

    broker.id=1
    listeners=PLAINTEXT://:9093
    log.dir=/tmp/kafka-logs-1

server-2.properties:

    broker.id=2
    listeners=PLAINTEXT://:9094
    log.dir=/tmp/kafka-logs-2

broker.id属性是集群中每个节点的名称,这一名称是唯一且永久的,因为这里我们只有一台服务器,所以用端口来区分,要是有多台服务器的话,使用IP地址来区分。

我们已经建立Zookeeper和一个单节点了,现在我们只需要启动两个新的节点:

./bin/kafka-server-start.sh ./config/server-1.properties &
....
./bin/kafka-server-start.sh ./config/server-2.properties &
....

查看是否启动成功:

ps -ef |grep server.properties
ps -ef |grep server-1.properties
ps -ef |grep server-2.properties

现在创建一个副本为3的新topic:

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

运行"describe topics"命令来查看:

./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: my-replicated-topic	Partition: 0	Leader: 0	Replicas: 0,1,2	Isr: 0

以下是对输出信息的解释。第一行给出了所有分区的摘要,下面的每行都给出了一个分区的信息。因为我们只有一个分区,所以只有一行。

1、“leader”是负责给定分区所有读写操作的节点。每个节点都是随机选择的部分分区的领导者。
2、“replicas”是复制分区日志的节点列表,不管这些节点是leader还是仅仅活着。
3、“isr”是一组“同步”replicas,是replicas列表的子集,它活着并被指到leader。
请注意,在示例中,节点1是该主题中唯一分区的领导者。

让我们发表一些信息给我们的新topic:

bin/kafka-console-producer.sh --broker-list localhost:9093 --topic my-replicated-topic
>nihao
>asd
>abcdefg

现在我们来消费这些消息:

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --from-beginning --topic my-replicated-topic
nihao
asd
abcdefg

让我们来测试一下容错性。 Broker 0 现在是 leader,让我们来杀了它:

ps aux | grep server.properties
root       20933  2.4 18.5 4700964 378184 pts/4  Sl   14:56   0:16 /opt/java/jdk1.8.0_144/bin/java -Xmx1G -Xms1G -server -X
kill -9 20933

领导权已经切换到一个从属节点,而且节点1也不在同步副本集中了:

./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: my-replicated-topic	Partition: 0	Leader: 1	Replicas: 0,1,2	Isr: 1,2

不过,即便原先写入消息的leader已经不在,这些消息仍可用于消费:

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --from-beginning --topic my-replicated-topic
nihao
asd
abcdefg
Step 4: 停止kafka单机集群
./bin/kafka-server-stop.sh

三、replication-factor说明

1、复制因子,topic存储几份副本(一份副本包含1到多个partition)。副本要放到broker中存储。

2、创建topic时,replication-factor数不能大于broker,

3、如果replication-factor等于broker,一个broker上存一份副本,这一份副本包含1到多个partition

4、如果replication-factor小于broker,有的副本的多个partition可能存在多个broker中。

猜你喜欢

转载自blog.csdn.net/qq_36588424/article/details/109026445