首页 > 编程知识 正文

kafka单机部署,Linux如何关闭kafka集群

时间:2023-05-05 18:18:40 阅读:33220 作者:3469

安装前的环境准备Kafka是用Scala语言开发的,在JVM上运行,因此必须在安装Kafka之前安装JDK。

# yuminstalljava-1.8.0-open JDK *-ykafka依赖zookeeper,因此必须先安装zookeeper

# wget http://mirror.bit.edu.cn/Apache/zookeeper/stable/zookeeper-3.4.12.tar.gz # tar-zxvf zookeeper-3

#已浏览/zkServer.sh start conf/zoo.cfg #已浏览/zkCli.sh # ls /#的根相关节点下载安装软件包1.1.0版本

# wget http://mirrors.tuna.Tsinghua.edu.cn/Apache/Kafka/1.1.0/Kafka _ 2.11-1.1.0.tgz # tar-xzfkafkafkkka

server.properties的配置路径是必需的参数,-daemon表示后台进程正在运行。 否则,当ssh客户端关闭时,服务将停止。 (请注意,kafka启动时将使用与linux主机名关联的ip地址,因此必须在本地主机上配置主机名和Linux IP映射,并使用vim /etc/hosts。)

#进入义肢面包/Kafka-server-start.sh-daemon config/server.properties zookeeper目录,从zookeeper客户端访问zokeeeper目录此主题只有一个分区,备份系数也设置为1。

#义理面包/Kafka-topics.sh---- create---- zookeeper localhost :2181----复制- factor1----partition

#义理面包/Kafka-topics.sh---list---- zookeeper localhost :2181除了我们手动创建主题外,我们还配置了中介,producer

发送消息的kafka附带了一个producer命令客户端,用于从本地文件读取内容。 也可以直接从命令行输入内容,并将其作为消息发送到kafka群集。 默认情况下,每行都被视为独立消息。

首先,运行发出消息的脚本,然后输入要发送到命令的消息的内容。

#正义面包/Kafka-console-producer.sh-- broker-list localhost 33609092-- topictestthisisamyxblogthisisanotherblog消费

#义理面包/Kafka-console-consumer.sh-- zookeeper localhost :2181--主题测试#旧版本#义理面包/Kafka-console-consumer.sh---bootstrap-server localhost :9092---consumer-property group.id=test group 在不同的终端窗口中运行上述命令后,在producer终端中输入的内容将立即显示在consumer的终端窗口中。

>

以上所有的命令都有一些附加的选项;当我们不携带任何参数运行命令的时候,将会显示出这个命令的详细用法。

还有一些其他命令如下:

查看组名# 义气的面包/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list --new-consumer 查看消费者的消费偏移量义气的面包/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group testGroup 消费多主题# 义气的面包/kafka-console-consumer.sh --bootstrap-server localhost:9092 --whitelist "test|test-2" 单播消费

一条消息只能被某一个消费者消费的模式,类似queue模式,只需让所有消费者在同一个消费组里即可,分别在两个客户端执行如下消费命令,然后往主题里发送消息,结果只有一个客户端能收到消息

# 义气的面包/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.id=testGroup --topic test 多播消费

一条消息能被多个消费者消费的模式,类似publish-subscribe模式费,针对Kafka同一条消息只能被同一个消费组下的某一个消费者消费的特性,要实现多播只要保证这些消费者属于不同的消费组即可。我们再增加一个消费者,该消费者属于testGroup-2消费组,结果两个客户端都能收到消息

# 义气的面包/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.id=testGroup-2 --topic test kafka集群配置

到目前为止,我们都是在一个单节点上运行broker,这并没有什么意思。对于kafka来说,一个单独的broker意味着kafka集群中只有一个接点。要想增加kafka集群中的节点数量,只需要多启动几个broker实例即可。为了有更好的理解,现在我们在一台机器上同时启动三个broker实例。

首先,我们需要建立好其他2个broker的配置文件:

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

配置文件的内容分别如下:

config/server-1.properties:

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

config/server-2.properties:

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

broker.id属性在kafka集群中必须要是唯一的。我们需要重新指定port和log目录,因为我们是在同一台机器上运行多个实例。如果不进行修改的话,consumer只能获取到一个instance实例的信息,或者是相互之间的数据会被影响。

目前我们已经有一个zookeeper实例和一个broker实例在运行了,现在我们只需要在启动2个broker实例即可:

# 义气的面包/kafka-server-start.sh config/server-1.properties &# 义气的面包/kafka-server-start.sh config/server-2.properties &

现在我们创建一个新的topic,备份因子设置为3:

# 义气的面包/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

现在我们已经有了集群,并且创建了一个3个备份因子的topic,但是到底是哪一个broker在为这个topic提供服务呢(因为我们只有一个分区,所以肯定同时只有一个broker在处理这个topic)?

# 义气的面包/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

以下是输出内容的解释,第一行是所有分区的概要信息,之后的每一行表示每一个partition的信息。因为目前我们只有一个partition,因此关于partition的信息只有一行。

leader节点负责给定partition的所有读写请求。leader信息可以在zookeeper里的/contronller目录查看。
replicas 表示某个partition在哪几个broker上存在备份。不管这个几点是不是”leader“,甚至这个节点挂了,也会列出。
isr 是replicas的一个子集,它只列出当前还存活着的,并且备份了该partition的节点。
现在我们的案例中,0号节点是leader,即使用server.properties启动的那个进程。

我们可以运行相同的命令查看之前创建的名称为”test“的topic

# 义气的面包/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

没有什么值得惊讶的地方,我们之前设置了topic的partition数量为1,备份因子为1,因此显示就如上所示了。

现在我们向新建的topic中发送一些message:

# 义气的面包/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic>my test msg 1>my test msg 2

现在开始消费:

# 义气的面包/kafka-console-consumer.sh --bootstrap-server localhost:2181 --from-beginning --topic my-replicated-topicmy test msg 1my test msg 2

现在我们来测试我们容错性,因为broker0目前是leader,所以我们要将其kill

# ps -ef | grep server.properties# kill -9 1177

现在再执行命令:

# 义气的面包/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

我们可以看到,leader节点已经变成了broker 2.要注意的是,在Isr中,已经没有了0号节点。leader的选举也是从ISR(in-sync replica)中进行的。

此时,我们依然可以 消费新消息:

# 义气的面包/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topicmy test msg 1my test msg 2 kafka分区leader选举原理

补充

kafka的组协调器与消费者协调器,组协调器负责选举出消费者leader,消费者leader根据分区分配策略匹配消费者与分区的消费关系

分区与消费者消费分配策略

round-ro义气的面包分区分配策略

 

 

 

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。