(一)kafka安装及操作命令
1.安装
kafka可以通过官网下载
https://kafka.apache.org/downloads
kafka根据Scala版本不同,又分为多个版本,我不需要使用Scala,所以就下载官方推荐版本kafka_2.12-2.4.0.tgz。
下载好后在自己的服务器上进行解压即可,这里就不演示了
2.Zookeeper配置
当前下载的kafka程序里自带Zookeeper,可以直接使用其自带的Zookeeper建立集群,也可以单独使用Zookeeper安装文件建立集群。
这里先用自带的,后期再写一篇zookeeper安装
kafka自带的Zookeeper程序脚本与配置文件名与原生Zookeeper稍有不同。
kafka自带的Zookeeper程序使用bin/zookeeper-server-start.sh,以及bin/zookeeper-server-stop.sh来启动和停止Zookeeper。而Zookeeper的配制文件是config/zookeeper.properties,可以修改其中的参数
启动Zookeeper
进入到kafka目录下:
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
加-daemon参数,可以在后台启动Zookeeper,输出的信息在保存在执行目录的logs/zookeeper.out文件中。
对于小内存的服务器,启动时有可能会出现如下错误
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)
可以通过修改bin/zookeeper-server-start.sh中的参数,来减少内存的使用,将下图中的-Xmx512M -Xms512M改小。
关闭Zookeeper
bin/zookeeper-server-stop.sh -daemon config/zookeeper.properties
3.kafka配置
kafka的配置文件在config/server.properties文件中,主要修改参数如下
broker.id是kafka broker的编号,集群里每个broker的id需不同。我这从0开始。
listeners是监听地址,需要提供外网服务的话,要设置本地的IP地址
log.dirs是日志目录,需要设置
设置Zookeeper集群地址,我这里就一个服务器上搭建了kafka和Zookeeper,所以就一个且填的本地地址
如果要用上面的集群的话可以用多台服务器,当然了如果你服务器内存各方面可以的话,也可以在一台服务器上搭建多个,用不同端口号来启动
num.partitions 为新建Topic的默认Partition数量,partition数量提升,一定程度上可以提升并发性
内部topic配置
内部__consumer_offsets和__transaction_state两个topic,分组元数据的复制因子,为了保证可用性,在生产上建议设置大于1。
default.replication.factor为kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务,是在自动创建topic时的默认副本数,可以设置为3
副本设置如下:
default.replication.factor=3
启动及停止kafka
1)启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
-daemon 参数会将任务转入后台运行,输出日志信息将写入日志文件,日志文件在执行命令的目录下的logs目录中kafkaServer.out,结尾输同started说明启动成功。
也可以用jps命令,看有没有kafka的进程
2)停止kafka
bin/kafka-server-stop.sh config/server.properties
4.测试
前提是kafka和Zookeeper已启动完成
1)创建topic
bin/kafka-topics.sh --zookeeper ip地址:2181 --create --topic first --partitions 3 --replication-factor 2
选项说明:
–topic 定义 topic 名
–replication-factor 定义副本数
–partitions 定义分区数
2)查看topic
bin/kafka-topics.sh --zookeeper ip地址:2181 --list
3)删除 topic (需要 server.properties 中设置 delete.topic.enable=true 否则只是标记删除)
bin/kafka-topics.sh --zookeeper IP地址:2181 --delete --topic first
4)发送消息
bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic first
>hello world
5)消费数据
bin/kafka-console-consumer.sh --zookeeper IP地址:2181 --topic first
–from-beginning:会把主题中以往所有的数据都读取出来。
bin/kafka-console-consumer.sh --zookeeper IP地址:2181 --from-beginning --topic first
6)查看某个 Topic 的详情
bin/kafka-topics.sh --zookeeper IP地址:2181 --describe --topic first
7)修改分区数
bin/kafka-topics.sh --zookeeper IP地址:2181 --alter --topic first --partitions 6