Kafka单节点至集群的安装部署及注意事项

Posted 浪尖聊大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka单节点至集群的安装部署及注意事项相关的知识,希望对你有一定的参考价值。

   kafka简介

kafka的重要作用:

发布和订阅

像消息传递系统一样读写数据流。

处理

编写实时响应事件的可伸缩流处理应用程序

存储系统

将数据流安全地存储在分布式的,副本的,容错存储系统。kafka常见的企业应用。Spark Structured Streaming,kafka Sql


企业中常见的kafka架构图:


本文主要内容是讲解kafka单节点的安装,集群的安装部署,集群安装过程中的重要配置,错误排查监控等内容。希望帮助大家快速入门。


一 下载安装

由于kafka依赖于Zookeeper,第一步要先下载安装Zookeeper

tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/modules/

复制配置文件:

cp conf/zoo_sample.cfg conf/zoo.cfg

配置数据存储目录:

dataDir=/opt/modules/zookeeper-3.4.5/data

创建数据存储目录:

mkdir /opt/modules/zookpeer-3.4.5/data


启动

bin/zkServer.sh start

查看状态

bin/zkServer.sh status


kafka下载版本是0.11.0.1,链接:

https://www.apache.org/dyn/closer.cgi?path=/kafka/0.11.0.1/kafka_2.11-0.11.0.1.tgz

tar -xzf kafka_2.11-0.11.0.1.tgz

cd kafka_2.11-0.11.0.1

二 启动server

启动在前台,关闭窗口或者ctrl+c就会关闭。

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

启动在后台

nohup /opt/modules/kafka_2.11-0.11.0.1/bin/kafka-server-start.sh /opt/modules/kafka_2.11-0.11.0.1/config/server.properties >/dev/null 2>&1 &

三 创建topic并测试

创建一个名字为test的topic,仅一个分区,一个副本

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


注意:副本数不能超过kafka Broker数目,否则会报错。


查看topic信息

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


另外,上面采用的是显示的创建topic,也可以配置Broker在往不存在的Broker发数据的时候自动创建topic。


启动生产者并发送消息测试:

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

This is a message

This is another message


启动消费者,接受消息:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

注意,这条指令会记录自己的偏移到Zookeeper或者kafka,所以假如每次都原封不动的执行这条指令会重复消费历史数据,想要从上次断开处消费消息,只需要执行的时候去掉from-beginning

四 设置多节点集群

上面测试的例子是单节点,单节点无需做什么处理直接启动即可,但是生产中单节点是满足不了我们的需求的,所以我们要学会和了解如何部署多节点集群。

由于测试机器能用资源有限,就用单节点去部署三个kafka服务。

要注意的是,我们的数据存储目录要不相同,端口也要不同,Broker id也要唯一。这三个要求满足之后就可以去启动kafka服务了。

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

启动各个服务实例

nohup bin/kafka-server-start.sh config/server-1.properties >/dev/null 2>&1 &

nohup bin/kafka-server-start.sh config/server-2.properties >/dev/null 2>&1 &


由于现在我们有三个Broker实例,虽然在同一台机器。这时候我们就可以创建副本数1<x<4的topic,命令如下:

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


查看我们topic的描述信息

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: 1,2,0 Isr: 1,2,0


上面的是对输出的解释,第一行是一个关于所有分区的概览。每一个额外的行都会显示一个分区的信息。创建topic时候,由于我们只给定了一个分区,所以仅仅会有一行。

1),leader :leader代表给定分区负责读写的Broker节点。每个Broker节点都会是部分随机选择分区的leader。

2),replicas: 真正复制给定分区日志数据的node列表,包括leader和Follower。

3),isr: 在同步副本的集合。Isr是副本集合的子集,代表着当前是存活的并且能跟上leader的步伐。

在例子里,Brokerid 为1的是分区的leader

对于,在单节点安装的时候创建的topic,我们依然可以查看其信息

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

Topic:test  PartitionCount:1    ReplicationFactor:1 Configs:

Topic: test Partition: 0    Leader: 0   Replicas: 0 Isr: 0


由于当时创建的时候,只有Broker id为0的节点,所以test分区只会存在该节点。假如我们想将该分区迁移到其它节点,也可以实现,该内容就不在这里讲了。


Producer几条数据给my-replicated-topic

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic

...

my test message 1

my test message 2


消费出来

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic

...

my test message 1

my test message 2


测试,kafka的容错,可以将Broker id为1的kafka实例停掉:


ps aux | grep server-1.properties

kill -9 pid


查看topic的信息

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: 2   Replicas: 1,2,0 Isr: 2,0


消费刚刚已经生产进去的消息

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic

...

my test message 1

my test message 2

五 重要配置详解

1, 部署一个kafka集群要修改的配置点

统一的Zookeeper集群,逗号隔开的Zookeeper集群

zookeeper.connect=localhost:2181

唯一的Broker id,大于等于0的整数

broker.id=0

数据存储目录,可以是多目录,逗号隔开

log.dirs=/tmp/kafka-logs

2, 问题排查及注意事项

经常有人在技术交流群里,@我,说浪尖,我代码在windows,kafka在虚拟机,明明可以ping通为何就是不能生产发送消息,而且虚拟机里面kafka的命令行都是正常的。

实际上就是应该配置Listeners参数。

0.8.2.2版本参数

# Hostname the broker will advertise to producers and consumers. If not set, it uses the
# value for "host.name" if configured.  Otherwise, it will use the value returned from
# java.net.InetAddress.getCanonicalHostName().
#advertised.host.name=<hostname routable by clients>

# The port to publish to ZooKeeper for clients to use. If this is not set,
# it will publish the same port that the broker binds to.
#advertised.port=<port accessible by clients>

0.9+版本参数

# The address the socket server listens on. It will get the value returned from 
# java.net.InetAddress.getCanonicalHostName() if not configured.
#   FORMAT:
#     listeners = security_protocol://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092

# Hostname and port the broker will advertise to producers and consumers. If not set, 
# it uses the value for "listeners" if configured.  Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
#advertised.listeners=PLAINTEXT://your.host.name:9092

 


3, 配置级别的管理

这个主要是想说的一个参数,就是topic日志的存储时间,我们这个版本默认是

log.retention.hours=168(7天)

log.retention.minutes

log.retention.ms

这样默认在server.properties配置看起来没啥问题,实际上,再生成中我们的数据缓存时间长度要求往往是不一样的,比如有些数据量比较大,我们磁盘优先仅仅想缓存几个小时,而有些却想缓存一周或者更久,那么这个时候就要使用topic级别的配置了。

retention.ms 604800000

修改topic级别配置方式如下

bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name my-topic --alter --add-config max.message.bytes=128000

六 监控系统讲解

Kafka监控,也是我们生产中常见的,在这里我们推荐的监控工具有

Kafka manager

Kafkatools

这些监控工具使用起来很简单,在这里就不详细介绍了。


推荐阅读:

1,

2,

3,

4,


本文分享内容:

Kafka单节点至集群的安装部署及注意事项



关于Spark高级玩法

更多文章,敬请期待





以上是关于Kafka单节点至集群的安装部署及注意事项的主要内容,如果未能解决你的问题,请参考以下文章

Kafka单节点及集群配置安装

Canal实时同步MySQL数据至Kafka集群,安装部署

Canal实时同步MySQL数据至Kafka集群,安装部署

Kafka单节点部署及使用

Kafka单节点部署及使用

Kafka单节点部署及使用