基于confluent的kafka和kafka-rest代理配置

基于confluent的kafka和kafka-rest代理配置

通过开启kafka-rest,可以使我们直接使用http访问到kafka.比如让前端直接给kafka发消息,用处还是很大的.

一、组件及说明

(一)Confluent的组件简介

Confluent Platform 包括更多的工具和服务,使构建和管理数据流平台更加容易。
Confluent Control Center(闭源)。管理和监控Kafka最全面的GUI驱动系统。
Confluent Kafka Connectors(开源)。数据进出kafka,连接SQL数据库/Hadoop/Hive等
Confluent Kafka Clients(开源)。对于其他编程语言,包括C/C++,Python
Confluent Kafka REST Proxy(开源)。允许一些系统通过HTTP和kafka之间发送和接收消息。
Confluent Schema Registry(开源)。帮助每一个应用使用正确的schema读写数据到kafka中。

1、Zookeeper 在 Kafka 中的作用
(其实随着kafka的迭代更新,zookeeper起到的作用越来越少,甚至kafka在讨论要不要完全弃用zookeeper。
在当前版本的作用,要看官方的quickstart,从“创建主题,生产者,消费者”的启动参数上看,是zookeeper还是bootstrap-server)

https://www.jianshu.com/p/a036405f989c

2、Schema Registry的作用

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

基于confluent的kafka和kafka-rest代理配置_第1张图片

(二)Confluent的安装

1、需要JDK环境
2、解压confluent包到/usr/local下
3、解压zookeeper安装包到/usr/local下
注:虽然conflunet里包含了zookeeper,但还是建议单独自建,比如用来查看状态的命令bin/zkServer.sh status,在conflunet下缺少此文件就难以实现。

(三)本次实验的结构

基于confluent的kafka和kafka-rest代理配置_第2张图片

二、服务的启动与配置

(一)、配置启动zookeeper

1、修改zookeeper配置文件,

vim zookeeper/conf/zoo.cfg

# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
# 滴答,计时的基本单位,默认是2000毫秒,即2秒。它是zookeeper最小的时间单位,用于丈量心跳时间和超时时间等,通常设置成默认2秒即可。
tickTime=2000

# 初始化限制是10滴答,默认是10个滴答,即默认是20秒。指定follower节点初始化是链接leader节点的最大tick次数。
initLimit=5

# 数据同步的时间限制,默认是5个滴答,即默认时间是10秒。设定了follower节点与leader节点进行同步的最大时间。与initLimit类似,它也是以tickTime为单位进行指定的。
syncLimit=2

# 指定zookeeper的工作目录,这是一个非常重要的参数,zookeeper会在内存中在内存只能中保存系统快照,并定期写入该路径指定的文件夹中。生产环境中需要注意该文件夹的磁盘占用情况。
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs

# 监听zookeeper的默认端口。zookeeper监听客户端链接的端口,一般设置成默认2181即可。
clientPort=2181

# 这个操作将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制。
#maxClientCnxns=60

# 在上文中已经提到,3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。
#autopurge.purgeInterval=1

# 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
#autopurge.snapRetainCount=3

#server.x=[hostname]:nnnnn[:nnnnn],这里的x是一个数字,与myid文件中的id是一致的。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。

server.104=172.16.192.104:2888:3888
server.105=172.16.192.105:2888:3888
server.106=172.16.192.106:2888:3888

2、创建上面配置文件中的目录,在上面配置文件中 dataDir的目录下新建myid文件,内容与配置文件里的相同

echo “104”>/data/zookeeper/data/myid

3、调优参考

https://www.cnblogs.com/yinzhengjie/p/9937816.html

4、启动 /usr/local/zookeeper/bin/zkServer.sh start

5、查看状态 /usr/local/zookeeper/bin/zkServer.sh status

[root@Centos7X5 zookeeper]#/usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader

上面这个是leader为主,提供读写,下面是follower为从,只能读。

[root@localhost bin]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

(二)、部署kafka集群

使用confluent中带有的kafka组件,进入/usr/local/confluent

1、编辑kafka服务配置文件,

vim etc/kafka/server.properties

#每一个broker在集群中的唯一表示,要求是正数。当该服务器的IP地址发生改变时,broker.id没有变化,则不会影响consumers的消息情况
broker.id=104
#broker的主机地址,若是设置了,那么会绑定到这个地址上,若是没有,会绑定到所有的接口上,并将其中之一发送到ZK
host.name=172.16.192.104
#broker server服务端口
port=9092
#处理网络请求的最大线程数
num.network.threads=30
#处理磁盘I/O的线程数
num.io.threads=30
#套接字服务器使用的发送缓冲区(SOYSNDBUF)
socket.send.buffer.bytes=102400
#套接字服务器使用的接收缓冲区(SOYRCVBUF)
socket.receive.buffer.bytes=102400
#套接字服务器将接受的请求的最大大小(对OOM的保护)
socket.request.max.bytes=104857600
#日志存放目录,多个目录使用逗号分割,如果你有多块磁盘,建议配置成多个目录,从而达到I/O的效率的提升。
log.dirs=/data/kafka/logs
#每个topic的分区个数,若是在topic创建时候没有指定的话会被topic创建时的指定参数覆盖
num.partitions=6
#在启动时恢复日志和关闭时刷盘日志时每个数据目录的线程的数量,默认1
num.recovery.threads.per.data.dir=1
# 默认副本数,默认为1表示没有副本
default.replication.factor=2
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志保存时间 (hours|minutes),默认为7天(168小时)。超过这个时间会根据policy处理数据。bytes和minutes无论哪个先达到都会触发。
log.retention.hours=168
#控制日志segment文件的大小,超出该大小则追加到一个新的日志segment文件中(-1表示没有限制)
log.segment.bytes=1073741824
# 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours或log.retention.bytes)
log.retention.check.interval.ms=300000
#zookeeper集群的地址,可以是多个,多个之间用逗号分割.
zookeeper.connect=172.16.192.104:2181,172.16.192.105:2181,172.16.192.106:2181
#指定多久消费者更新offset到zookeeper中。注意offset更新时基于time而不是每次获得的消息。一旦在更新zookeeper发生异常并重启,将可能拿到已拿到过的消息,连接zk的超时时间
zookeeper.connection.timeout.ms=6000
#confluent特有配置
confluent.support.metrics.enable=true
confluent.support.customer.id=anonymous
group.initial.rebalance.delay.ms=0

2、启动kafka

/usr/local/confluent/bin/kafka-server-start -daemon /usr/local/confluent/etc/kafka/server.properties

3、使用jps可以看到现在的进程

[root@localhost confluent]# jps
7042 Jps
7018 SupportedKafka
6891 QuorumPeerMain

4、此时,可以到zookeeper里查看kafka的状态,默认连接localhost:2181。组成集群的状态下,随便连接哪一个节点,返回的内容都是一样的。

/usr/local/zookeeper/bin/zkCli.sh -server 172.16.192.104:2181

[zk: 172.16.192.104:2181(CONNECTED) 2] ls /brokers/ids
[104, 105, 106]

上面表示有3个kafka的broker节点在线

[zk: 172.16.192.104:2181(CONNECTED) 19]  get /brokers/ids/104
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://172.16.192.104:9092"],"jmx_port":-1,"host":"172.16.192.104","timestamp":"1558318548067","port":9092,"version":4}
cZxid = 0xa00000016
ctime = Mon May 20 10:15:48 CST 2019
mZxid = 0xa00000016
mtime = Mon May 20 10:15:48 CST 2019
pZxid = 0xa00000016
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x6a0000244ab70000
dataLength = 198
numChildren = 0

5、kafka生产、消费

1)创建主题:

bin/kafka-topics --create --bootstrap-server 172.16.192.104:9092,172.16.192.105:9092,172.16.192.106:9092 --partitions 3 --replication-factor 2 --topic test

–bootstrap-server 列表里,任意连接到一个节点,都可以返回整个集群节点的信息。分区、副本数是可选项,不指定的话按照配置文件。

2)生产消息:

bin/kafka-console-producer --broker-list 172.16.192.104:9092,172.16.192.105:9092 --topic test

–broker-list 列表里,任意连接到一个节点,都可以返回整个集群节点的信息。

3)消费消息:

bin/kafka-console-consumer --bootstrap-server 172.16.192.104:9092,172.16.192.105:9092 --topic test --from-beginning

(三)、配置schema注册表schema registry

1、修改schema-registry配置文件

vim etc/schema-registry/schema-registry.properties

#集群的时候要配置这个
host.name=172.16.192.104
# Confluent Schema Registry 服务的访问IP和端口
listeners=http://172.16.192.104:8081
# Kafka集群所使用的zookeeper地址,如果不配置,会使用Confluent内置的Zookeeper地址(localhost:2181)
kafkastore.connection.url=172.16.192.104:2181,172.16.192.105:2181,172.16.192.106:2181
# Kafka集群的地址
kafkastore.bootstrap.servers=PLAINTEXT://172.16.192.104:9092,PLAINTEXT://172.16.192.105:9092,PLAINTEXT://172.16.192.106:9092
# 存储 schema 的 topic,保持默认即可
kafkastore.topic=_schemas
debug=false

2、启动schema registry

/usr/local/confluent/bin/schema-registry-start -daemon /usr/local/confluent/etc/schema-registry/schema-registry.properties

3、进入zookeeper查看注册表状态

[zk: 172.16.192.106:2181(CONNECTED) 4] get /schema_registry/schema_registry_master
{"host":"172.16.192.104","port":8081,"master_eligibility":true,"scheme":"http","version":1}
cZxid = 0xa00000081
ctime = Mon May 20 10:43:40 CST 2019
mZxid = 0xa00000081
mtime = Mon May 20 10:43:40 CST 2019
pZxid = 0xa00000081
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x6a0000244ab70002
dataLength = 91
numChildren = 0

schema_registry_master里记录的是104,表示104竞争到了主位,其他为从。

(四)、启动kafka-rest代理

1、修改配置文件etc/kafka-rest/kafka-rest.properties

id=104
host.name=172.16.192.104
zookeeper.connect=172.16.192.104:2181,172.16.192.105:2181,172.16.192.106:2181
bootstrap.servers=PLAINTEXT://172.16.192.104:9092,PLAINTEXT://172.16.192.105:9092,PLAINTEXT://172.16.192.106:9092
schema.registry.url=http://172.16.192.104:8081,http://172.16.192.105:8081,http://172.16.192.106:8081

2、启动rest代理

nohup /usr/local/confluent//bin/kafka-rest-start /usr/local/confluent/etc/kafka-rest/kafka-rest.properties >> /usr/local/confluent/logs/kafka-rest.log 2>&1 &

(五)、Kafka REST Proxy的使用

https://docs.confluent.io/4.0.0/kafka-rest/docs/intro.html

参考:
zookeeper+Kafka完全分布式实战部署https://www.cnblogs.com/yinzhengjie/p/9937816.html
Kafka动态调整topic副本因子replication-factorhttps://blog.csdn.net/russle/article/details/83421904

你可能感兴趣的:(大数据,运维)