大数据集群5——安装kafka

1、什么是Kafka

Kafka是一个分布式流处理平台,有以下三种特性:

1)可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。

2)可以储存流式的记录,并且有较好的容错性。

3)可以在流式记录产生时就进行处理。

它可以用于两大类别的应用:

构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)

构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)

1.1、Kafka架构

图1-1 Kafka架构示意图

Producer:Kafka的生产者,包括前端(埋点数据传送),后台服务(直接往kafka的集群里扔数据)以及数据库的事务表日志变化捕获等,这里在开发生产者代码时要考虑负载均衡,将数据均匀分到各个分区中。

Broker:Kafka Server被称为broker,一般一台机器部署一个broker,称为Kafka集群的一个节点。

Topic: Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka中的topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。对于每一个topic, Kafka集群都会维持一个分区日志。

Partition: 每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的commit log文件。一个topic可以有一个或多个分区,若是想保持所有记录顺序读写,只能是一个分区。

Replica: partition的副本,保障kafka的高可用。

Leader: 每个topic的相同分区只会有一个leader,并且生产者数据的读写,消费者数据的读写都是和leader进行的。

Follower: follower跟随leader,所有写请求都通过leader路由,数据变更会广播给所有follower,follower与leader保持数据同步。如果leader失效,则从follower中选举出一个新的leader(这里需要注意ISR机制)。

Controller:controller负责管理Kafka集群,由broker竞选上任,第一个抢到在zookeeper上面到临时节点的broker即为controller,并且如果因为GC或者什么原因导致两个controller情况下,Kafka会有一个变量用来记录最新的controller,集群所有节点只听最新的controller发送的指令。

Consumer:消费者,从Kafka中消费消息的终端、服务或者数据库。consumer数量大于partition则有consumer空闲;consumer数量小于partition,则一个consumer消费多个patition;consumer数量等于partition,则一对一。

Consumer Group: 每个consumer都属于一个consumer group,同一个partition只能被同一个consumer group中的一个consumer消费,同一个partition可以被不同consumer group中的多个不同consumer消费。同一个消费者组的多个消费者消费同一个topic的同一个分区就会可能导致数据重复消费(这个需要为消费者指定topic的分区才会导致,一般为消费者指定topic即可,就会自动为同一个消费者组中的消费者分配对应的partition)。

Zookeeper: kafka通过zookeeper来存储集群的元数据信息,包括生产者需要知道topic的各个分区leader在哪些服务器上,kafka集群的controller需要在zk上创建临时节点,消费者需要知道上次消费的offset,以及topic的各个分区leader在哪些服务器上。

Offset:分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset,offset用来唯一的标识分区中每一条记录。在每一个消费者中唯一保存的元数据是offset(偏移量)即消费在log中的位置.偏移量由消费者所控制:通常在读取记录后,消费者会以线性的方式增加偏移量,但是实际上,由于这个位置由消费者控制,所以消费者可以采用任何顺序来消费记录。例如,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从"现在"开始消费。

Ack: Ack为1的时候只要Leader副本确认收到了生产者数据即可认为数据发送成功,Ack为-1就是在所有副本和Leader完成数据同步都收到了数据后才确认数据发送成功,Ack为0就是生产者不管发送是否成功只管发送。

ISR:多副本机制能保证kafka的高可用,但不能保证数据不丢失。leader宕机时,数据还没有被同步到其他follower,即使选举了新的leader,也会丢失没有同步部分的数据。ISR(in-sync replica)机制主要是为了保证数据的不丢失,ISR列表中存放和leader数据完全同步的follower,只有处于ISR列表中的follower才可以在leader宕机之后被选举为新的leader,因为在这个ISR列表里代表他的数据跟leader是同步的。

2、环境准备

表2-1 环境准备

ip

安装软件

内存

磁盘空间

192.168.80.130

jdk1.8、zookeeper3.4.10、centos7、kafka2.11-0.11.0.2

4G

20G

192.168.80.131

jdk1.8、zookeeper3.4.10、centos7、kafka2.11-0.11.0.2

4G

20G

192.168.80.132

jdk1.8、zookeeper3.4.10、centos7、kafka2.11-0.11.0.2

4G

20G

3、配置hosts

图3-1 hosts配置示意图

4、创建对应的目录和文件

首先下载kafka的包,并且解压后改名字为kafka,放在/opt/software/下面。

mkdir /opt/software/kafka/log

在/opt/software/kafka路径下创建文件夹logs。

4.1、修改配置文件

vim /opt/software/kafka/config/server.properties

输入以下内容:

# The id of the broker. This must be set to a unique integer for each broker.

# 对于kafka而言,一个broker即对应集群中的一个机器,broker.id这个参数是为了唯一

# 标识集群中的机器。

broker.id=0

# Switch to enable topic deletion or not, default value is false

# 该参数为true才能将kafka对应的topic删除。

delete.topic.enable=true

# The number of threads that the server uses for receiving requests from the network and sending responses to the network

num.network.threads=3

# The number of threads that the server uses for processing requests, which may include disk I/O

num.io.threads=8

# The send buffer (SO_SNDBUF) used by the socket server

socket.send.buffer.bytes=102400

# The receive buffer (SO_RCVBUF) used by the socket server

socket.receive.buffer.bytes=102400

# The maximum size of a request that the socket server will accept (protection against OOM)

socket.request.max.bytes=104857600

# A comma seperated list of directories under which to store log files

log.dirs=/opt/software/kafka/log

# The default number of log partitions per topic. More partitions allow greater

# parallelism for consumption, but this will also result in more files across

# the brokers.

num.partitions=1

# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown.

# This value is recommended to be increased for installations with data dirs located in RAID array.

num.recovery.threads.per.data.dir=1

log.retention.hours=168

zookeeper.connect=worker1:2181,worker2:2181,worker3:2181

4.2、配置环境变量

vim /etc/profile

进入文件后修改添加内容如下:

#KAFKA_HOME

export KAFKA_HOME=/opt/software/kafka

export PATH=$PATH:$KAFKA_HOME/bin

将配置好的文件kafka分发到kafka集群其他节点上,并修改对应的broker.id配置值。

分发命令如下所示:

scp -r /opt/software/kafka/ root@192.168.80.131:/opt/software/

scp -r /opt/software/kafka/ root@192.168.80.132:/opt/software/

我这里的另外两台机器分别改为了1和2。

在192.168.80.131机器上配置如下所示:

# 标识集群中的机器。

broker.id=1

在192.168.80.132机器上配置如下所示:

# 标识集群中的机器。

broker.id=2

5、启动测试kafka集群

在192.168.80.130机器上启动如下命令:

nohup sh /opt/software/kafka/bin/kafka-server-start.sh /opt/software/kafka/config/server.properties &

在192.168.80.131机器上启动如下命令:

nohup sh /opt/software/kafka/bin/kafka-server-start.sh /opt/software/kafka/config/server.properties &

在192.168.80.132机器上启动如下命令:

nohup sh /opt/software/kafka/bin/kafka-server-start.sh /opt/software/kafka/config/server.properties &

 

图5-1 kafka集群启动示意图

5.1、关闭kafka集群

在192.168.80.130机器上启动如下命令:

sh /opt/software/kafka/bin/kafka-server-stop.sh stop

在192.168.80.131机器上启动如下命令:

sh /opt/software/kafka/bin/kafka-server-stop.sh stop

在192.168.80.132机器上启动如下命令:

sh /opt/software/kafka/bin/kafka-server-stop.sh stop

6、参考链接

https://blog.csdn.net/a3125504x/article/details/108128795

https://cloud.tencent.com/developer/article/1446017

https://www.w3cschool.cn/apache_kafka/apache_kafka_cluster_architecture.html

https://mp.weixin.qq.com/s/kiI-TiLev2PC39enpCzs7A

https://kafka.apachecn.org/intro.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值