Kafka——Kafka搭建及问题解决
Kafka简介
Kafka是基于发布与订阅的消息系统设计的分布式流处理平台,有scale和java编写开发,官方对其描述为拥有三大功能:
- Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.(发布订阅流记录,与消息队列、企业级消息系统相似)
- Store streams of records in a fault-tolerant durable way.(以容错、持久的方式存储记录流)
- Process streams of records as they occur.(实时流处理)
Kafka的数据单元是消息,消息通过主题进行分类,主题可以分为若干个分区,一个分区就是一个提交日志,消息以追加的方式写入分区,然后以先入先出的顺序进行读取。对于Kafka的用户分为两种:生产者、消费者。生产者用于创建消息,消费者又称为订阅者,用于读取消息。一个独立的Kafka服务器成为broker,broker接收生产者发送的消息并存入磁盘,并且broker为消费者提供服务,对读取请求做出相应。broker是集群的组成部分,broker集群通过zookeeper进行协调管理。
Kafka特点
- 多个生产者
- 多个消费者
- 基于磁盘的数据存储
- 伸缩性、高性能
Kafka集群搭建准备
服务器三台:
192.168.108.128
192.168.108.129
192.168.108.130
Kafka版本:kafka_2.12-2.3.0.tgz
Kafka需要依托ZooKeeper做集群管理,建议不使用Kafka安装包自带的ZooKeeper自己搭建ZooKeeper集群,ZooKeeper搭建过程参考:
下载并解压
tar -zxf kafka_2.12-2.3.0.tgz
cd kafka_2.12-2.3.0
解压后的目录结构
drwxr-xr-x. 3 root root 4096 8月 26 11:03 bin
drwxr-xr-x. 2 root root 4096 8月 26 11:17 config
drwxr-xr-x. 2 root root 4096 8月 26 10:47 libs
-rw-r--r--. 1 root root 32216 6月 20 04:43 LICENSE
drwxr-xr-x. 2 root root 4096 8月 26 15:01 logs
-rw-r--r--. 1 root root 337 6月 20 04:43 NOTICE
drwxr-xr-x. 2 root root 44 6月 20 04:44 site-docs
修改配置
修改配置文件,位置文件位于config文件夹中,进入config后,仅需修改server.properties配置文件即可。在配置文件中需要修改两处配置(broker.id和zookeeper.connect),这两个配置决定了broker所属的集群和id
192.168.108.128
broker.id=1 #集群中broker的唯一id整数表示
listeners=PLAINTEXT://192.168.108.128:9092 #监听地址和端口
log.dirs=/tmp/kafka-logs #日志存储地址
zookeeper.connect=192.168.108.128:2181,192.168.108.129:2181,192.168.108.130:2181 #zookeeper集群
zookeeper.connection.timeout.ms=60000 #zookeeper连接超时时间,建议长一点
192.168.108.129
broker.id=2
listeners=PLAINTEXT://192.168.108.129:9092
log.dirs=/tmp/kafka-logs
zookeeper.connect=192.168.108.128:2181,192.168.108.129:2181,192.168.108.130:2181
zookeeper.connection.timeout.ms=6000
192.168.108.130
broker.id=3
listeners=PLAINTEXT://192.168.108.130:9092
log.dirs=/tmp/kafka-logs
zookeeper.connect=192.168.108.128:2181,192.168.108.129:2181,192.168.108.130:2181
zookeeper.connection.timeout.ms=6000
配置文件分为broker配置和主题配置两大类
broker配置:
属性名 | 说明 | 默认值 |
---|---|---|
broker.id | broker唯一标识符,可以为任意整数,需要与zookeeper的myid值对应。默认值为0 | |
listeners | 监听的地址和ip,以前的版本分为host和port两个属性 | |
zookeeper.connect | 配置管理broker元数据的zookeeper地址,多个地址用逗号分隔 | |
zookeeper.connection.timeout.ms | zookeeper连接超时时长 | |
log.dirs | 存放消息日志的目录 | |
主题配置: | ||
属性名 | 默认值 | |
– | – | |
num.partitions | 每个主题包含的分区数 | |
log.retention.hours | 设置数据保留时间,默认168小时 | |
log.retention.bytes | 通过消息字节数判断是否过期,如果主题大小超过log.retention.bytes值,则删除 | |
log.segment.bytes | 日志大小达到log.segment.bytes值,关闭日志并开启一新日志进行记录 |
Kafka集群启动
在三台服务器上分别启动kafka
bin/kafka-server-start.sh config/server.properties &
...
[2019-08-26 11:31:09,152] INFO Kafka version: 2.3.0 (org.apache.kafka.common.utils.AppInfoParser)
[2019-08-26 11:31:09,152] INFO Kafka commitId: fc1aaa116b661c8a (org.apache.kafka.common.utils.AppInfoParser)
[2019-08-26 11:31:09,152] INFO Kafka startTimeMs: 1566790269114 (org.apache.kafka.common.utils.AppInfoParser)
[2019-08-26 11:31:09,153] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)
输入jps查看java进程
40289 Jps
39417 Kafka
39341 QuorumPeerMain
有Kafka进程,启动成功
搭建时遇到的问题
Zookeeper客户端连接超时
kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connecting
解决方案
- 服务器zookeeper配置文件server.x和kafka配置broker.id的编号不一致,修改Kafka配置文件中的broker.id与zoo.cfg中的server.x一致
- 重启zookeeper集群后,再启动Kafka,问题解决