学习记录文档,若有错误多谢指出。
kafka.apache.org
kafka 是一个由scala和java开发的流处理平台,是一种高吞吐量的分布式发布订阅消息系统。
scala2.11-kafka0.11.0.0(0.9及以后消息偏移量存储位置与isr缓存队列的塞选策略有所变更。
目录
安装
解压
tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module
创建文件夹
mkdir /opt/module/kafka_2.11-0.11.0.0/logs
// mkdir /opt/module/kafka_2.11-0.11.0.0/data
配置文件
…/config/server.properties
broker.id=2 ## 唯一的服务器id
delete.topic.enable=true ## 主题是否可删除(topic)
log.dirs=/opt/module/kafka_2.11-0.11.0.0/logs ## kafka暂存 "数据"的目录,日志也默认的放到了这个目录listeners=PLAINTEXT://:9092 ## 服务端口号(使用默认)
num.network.threads=3 ## 网络线程数(使用默认)
num.io.threads=8 ## io线程数(使用默认)
–## .log数据文件"非日志文件"的保存的时间单位小时(使用默认)
log.retention.hours=168
zookeeper.connect=centos7x8664-2:2181,centos7x8664-3:2181,centos7x8664-4:2181 ## zookeeper集群
kafka目录结构
/opt/module/kafka_2.11-0.11.0.0/bin
服务相关
zookeeper-server-start.sh
zookeeper-server-stop.sh
控制台的生产者消费者(用做测试)
kafka-console-consumer.sh
kafka-console-producer.sh
主题操作 增/删/改/查
kafka-topics.sh
集群的压力测试
kafka-producer-perf-test.sh ## 生产者
kafka-consumer-perf-test.sh ## 消费者
分发到其它服务器
3 ~ 4
scp -r /opt/module/kafka_2.11-0.11.0.0 root@centos7x8664-3:/opt/module
scp -r /opt/module/kafka_2.11-0.11.0.0 root@centos7x8664-4:/opt/module
设置kafka的broker.id(唯一)
vim /opt/module/kafka_2.11-0.11.0.0/config/server.properties
启动
kafka
kafka是单节点启动的且默认是阻塞进程
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-server-start.sh
以守护进程模式启动
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-server-start.sh \
-daemon \
/opt/module/kafka_2.11-0.11.0.0/config/server.properties
使用群启脚本启动
编写群启脚本
#!/bin/bash
case $1 in
"start"){
for i in centos7x8664-2 centos7x8664-3 centos7x8664-4
do
echo ">>>>>>>>>>>>>>>>>>>> start $i <<<<<<<<<<<<<<<<<<<<"
ssh $i "sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-server-start.sh -daemon /opt/module/kafka_2.11-0.11.0.0/config/server.properties"
done
};;
"stop"){
for i in centos7x8664-2 centos7x8664-3 centos7x8664-4
do
echo ">>>>>>>>>>>>>>>>>>>> stop $i <<<<<<<<<<<<<<<<<<<<"
ssh $i "sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-server-stop.sh"
done
};;
esac
赋予启动权限
chmod +x /root/utils/kafka.sh
启动
sh /root/utils/kafka.sh start
查看kafka日志输出
tail -f /opt/module/kafka_2.11-0.11.0.0/logs/kafkaServer.out
终止kafka进程
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-server-stop.sh
使用
命令
topic
列出
列出当前broke(kafka)的所有主topic(主题)
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --list --zookeeper <zookeeper-server-host:prot>
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --list --zookeeper centos7x8664-2:2181
详细信息
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --describe --topic <topic-name> --zookeeper <zookeeper-server-host:prot>
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --describe --topic first-topic --zookeeper centos7x8664-2:2181
创建
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --create --zookeeper <<zookzookeeperer-server-host:prot> --topic <zooker-server-host:prot> --partitions <partition-number> --replication-factor <replication-number>
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --create --zookeeper centos7x8664-2:2181 --topic first-topic --partitions 2 --replication-factor 2
删除
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --delete --zookeeper <zookzookeeperer-server-host:prot> --topic <topic-name>
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-topics.sh --delete --zookeeper centos7x8664-2:2181 --topic first-topic
producer(生产者)
开启一个生产者
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-producer.sh --topic <topic-name> --broker-list <kafka-server-host:port>
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-producer.sh --topic first-topic --broker-list centos7x8664-2:9092
consumer(消费者)
开启一个消费者(过时的)
直接链接zookeeper集群。但会出现警告因为0.9版本以后kafka队列数据的某些数据不会再存到zookeeper。
非从头开始
从最大的开始,非从头消费则只会收到最新的消息,kafka缓存的过往数据无法拉取
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic <topic-name> --zookeeper <zookzookeeperer-server-host:prot>
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic first-topic --zookeeper centos7x8664-2:2181
从头消费
非顺序,但队列是按顺序的
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic <topic-name> --zookeeper <zookzookeeperer-server-host:prot> --from-beginning
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic first-topic --zookeeper centos7x8664-2:2181 --from-beginning
开启一个消费者
0.9x 新的使用kafka集群
区别:当以这种方式创建消费者时会在kafka集群里的 log.dirs ( …/logs ) 文件夹"轮训的"均衡的创建50个__consumer-offsets 每个节点存放__consumer-offsets的数量为 [服务器数量 / 50],因为新版本0.9x以后的kafka会将数据存在本地(这里的本地指的是kafka而不是本地磁盘),这里的__consumer-offsets属于是系统topic的分区,这些分区用做"为消费者存储消费到的位置(偏移量)",且用作kafka集群的负载均衡。
非从头开始
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic <topic-name> --bootstrap-server <kafka-server-host:port>
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic first-topic --bootstrap-server centos7x8664-2:9092
从头开始
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic <topic-name> --bootstrap-server <kafka-server-host:port> --from-beginning
sh /opt/module/kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --topic first-topic --bootstrap-server centos7x8664-2:9092 --from-beginning
遇到的问题
cat /opt/module/kafka_2.11-0.11.0.0/logs/kafkaServer.out
“nohup: 无法运行命令"java”: 没有那个文件或目录"
确认一下ssh默认登陆到了哪个用户(root),在用户目录下/root/.bashrc 里添加一个java可执行程序的绝对路径即可!