0


运维学习————kafka(1)

关于消息队列的概念,三个作用(解耦、异步、削峰),使用场景,消息队列的两种模式,常见的MQ的框架等等,可以看我之前的RabbitMQ的文章,那里有详细介绍,这里就不过多赘述了........直接就kafka走起

一、Kafka简介

中文网址:kafka中文文档

Kafka官网:http://kafka.apache.org/

kafka是由apache软件基金会开发的一个开源流处理框架,由JAVA和scala语言编写。是一个高吞吐量的分布式的发布和订阅消息的一个系统。Kafka用于构建实时的数据管道和流式的app.它可以水平扩展,高可用,速度快,并且已经运行在数千家公司的生产环境。

二、基本术语

topic(话题):kafka将消息分门别类,每一类的消息称之话题,是逻辑上的一个概念,如果是真正到磁盘上,映射的是一个partition分区的一个目录。

**生产者(producer):**发布消息的对象称之为生产者,只负责数据的产生,生产的来源,可以不在kafka集群上,而是来自其他的业务系统。

**消费者(consumer):**订阅消息并处理发布消息的对象,称为消费者。

**消费者组(consumerGroup):**多个消费者可以构成消费者组,同一个消费者组的消费者,只能消费一个topic数据,不能重复消费。

**broker :**kafka本身可以是一个集群,集群中的每一个服务器都是一个代理,这个代理称为broker。只负责消息的存储,不管生产者和消费者,和他们没有任何关系。在集群中每个broker有唯一个ID,不能重复。

三、集群搭建

以下操作需要同时在三台机子进行,不想的话,可以先操作一台,然后把这一台的配置全部发送到另外两台,这个时候就需要在第一台机子上做免密登录的操作,保证第一个机子可以发送文件到另外两台

kafka_2.12-2.7.0.tar:kafka-2.12-2.7.0.tar

#解压缩
tar -xzvf /software/kafka_2.12-2.7.0.tgz -C /usr/

#修改名称
mv /usr/kafka_2.12-2.7.0/  /usr/kafka

#配置环境变量
vi /etc/profile

#添加以下代码
export KAFKA_HOME=/usr/kafka
export PATH=$PATH:$ZK_HOME/bin:$KAFKA_HOME/bin

#使配置文件生效
source /etc/profile

#测试,是否生效
echo $KAFKA_HOME

kafka是使用scala 语言编写 2.12是该语言的版本 2.7.0这是kafka版本

#进入kafka目录
cd /usr/kafka

#创建目录(存放消息),为后面配置做准备      
mkdir logs

#修改配置server.properties文件
vim /usr/kafka/config/server.properties

server.properties配置

#broker的全局唯一编号,不能重复
broker.id=0
#是否允许删除topic
delete.topic.enable=true
#处理网络请求和响应的线程数量
num.network.threads=3
#用来处理磁盘IO的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的最大缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/usr/kafka/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1

############################# Internal Topic Settings  #############################
# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state"
# For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3.
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

#以下配置控制日志段的处理。可以将策略设置为在一段时间后或在给定大小累积后删除段。只要满足这些条件中的*任一*项,就会删除段。删除总是从日志的末尾开始
#segment文件保留的最长时间,超时将被删除,单位小时,默认是168小时,也就是7天
log.retention.hours=168
#基于大小的日志保留策略。除非剩余的段低于log.retention.bytes,否则将从日志中删除段。独立于log.retention.hours的功能
#log.retention.bytes=1073741824
#日志段文件的最大大小。当达到此大小时,将创建一个新的日志段。
log.segment.bytes=1073741824

#检查日志段以查看是否可以根据保留策略删除日志段的间隔
log.retention.check.interval.ms=300000

############################# Zookeeper #############################

#配置连接Zookeeper集群地址
zookeeper.connect=cluster1:2181,cluster2:2181,cluster3:2181

# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=18000

############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0

集群配置那里,需要先在三个机子的/etc/hosts下添加这三个机子的ip配置

192.168.37.152 cluster1

192.168.37.153 cluster2

192.168.37.154 cluster3

producer.properties

#修改producer.properties
vim /usr/kafka/config/producer.properties

#修改这一行就行
bootstrap.servers=cluster1:9092,cluster2:9092,cluster3:9092

consumer.properties

#修改consumer.properties
vim /usr/kafka/config/consumer.properties

#修改这一行就行
bootstrap.servers=cluster1:9092,cluster2:9092,cluster3:9092

免密登录

#发送配置好的kafka到另外两台机子(先做免密登录):
     ssh-keygen -t rsa
     ssh-copy-id cluster2
     ssh-copy-id cluster3
     scp -r /usr/kafka/  cluster2:/usr/
     scp -r /usr/kafka/  cluster3:/usr/
#检查发送是否成功,在all session执行:
     ls /usr
#修改broker.id(切记)   在cluster2和cluster3上修改broker.id
     vim /usr/kafka/config/server.properties
        broker.id=2
        broker.id=3
#发送环境变量配置文件:
     scp -r  /etc/profile  cluster2:/etc/
     scp -r  /etc/profile  cluster3:/etc/
#在all session执行:
     source  /etc/profile
     echo  $KAFKA_HOME
#发送hosts配置文件:
     scp -r  /etc/hosts  cluster2:/etc/
     scp -r  /etc/hosts  cluster3:/etc/
#测试是否成功:在all session执行:
     cat  /etc/hosts

四、集群的启动和关闭

启动kafka之前一定要保证zk在启动,并且可用

启动zookeeper

启动zk ,关于zk脚本同时启动,可以参考我的另一个文章

https://blog.csdn.net/m0_73376570/article/details/141803080

zk启动之后的效果:

启动kafka

在all session中执行:

#启动kafka
kafka-server-start.sh -daemon  /usr/kafka/config/server.properties

#检查是否运行成
jps
ps -ef | grep java

#停止kafka
kafka-server-stop.sh

五、常用命令

#查看当前服务器中的所有topic主题:
kafka-topics.sh --zookeeper cluster1:2181 --list

#如果是zk集群可以使用这样的命令:
kafka-topics.sh --zookeeper cluster1:2181,cluster2:2181,cluster3:2181 --list

#创建topic: list
kafka-topics.sh --zookeeper cluster2:2181 --create --replication-factor 3 --partitions 5 --topic ordertopic

kafka-topics.sh --zookeeper cluster2:2181 --create --replication-factor 2 --partitions 2 --topic goodstopic

#删除topic
kafka-topics.sh --zookeeper cluster1:2181 --delete --topic goodstopic

#生产消息
kafka-console-producer.sh --broker-list cluster2:9092  --topic goodstopic

#消费消息
kafka-console-consumer.sh  --bootstrap-server cluster2:9092  --from-beginning  --topic  goodstopic

#同组消费者消费消息(多个窗口)
kafka-console-consumer.sh --bootstrap-server kafka1:9092 --consumer-property group.id=gtest  --from-beginning --topic goodstopic

#查看一个topic详情
kafka-topics.sh --zookeeper  cluster2:2181,cluster1:2181 --describe --topic tp1

参数说明:

--zookeeper 链接zk

--replication-factor 指定副本数目(副本数目不能大于总的brokers数目)

--partitions 指定分区数

--topic 指定topic名称

partitioncount 分区总数量

replicationfactor 副本数量

partition 分区

leader 每个分区有3个副本,每个副本都有leader

replicas 所有副本节点,不管leader follower

isr: 正在服务中的节点

标签: 学习 kafka 分布式

本文转载自: https://blog.csdn.net/m0_73376570/article/details/141871105
版权归原作者 乆乄 所有, 如有侵权,请联系我们删除。

“运维学习————kafka(1)”的评论:

还没有评论