kafka的安装:
在linux环境使用 kafka版本 2.11-2.4.1搭建,这个版本需要依赖jdk和zookeeper,jdk的安装不做说明,这里说明一下zookeeper和kafka的安装和使用;
zookeeper 的安装,启动使用默认配置即可:
下载:wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
解压:tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
到bin目录下:cd apache-zookeeper-3.5.8-bin
复制生成zoo.cfg:cp conf/zoo_sample.cfg conf/zoo.cfg
启动:bin/zkServer.sh start
kafka的安装:
下载:wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.11-2.4.1.tgz
解压:tar -xzf kafka_2.11-2.4.1.tgz
到kafka目录下:cd kafka_2.11-2.4.1
修改 config/server.properties 配置:
#id在kafka集群中必须唯一
broker.id=0
# 部署的及其ip和提供服务的端口号
# 内网ip
listeners=PLAINTEXT://172.23.95.177:9092
# 外网ip
advertised.listeners=PLAINTEXT://39.99.224.175:9092
# 存放消息文件和索引的目录
log.dirs=/usr/local/log/kafka
# 默认分区数量
num.partitions=1
# zookeeper 地址
zookeeper.connect=39.99.224.175:2181
zookeeper.connection.timeout.ms=6000
启动kafka:
bin/kafka-server-start.sh config/server.properties &
停kafka服务:
bin/kafka-server-stop.sh
创建topic(指定一个分区一个备份),topic是test:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看kafka中目前存在的topic
bin/kafka-topics.sh --list --zookeeper 39.99.224.175:2181
删除主题
bin/kafka-topics.sh --delete --topic test --zookeeper 39.99.224.175:2181
查看topic的分区情况
bin/kafka-topics.sh --describe --zookeeper 39.99.224.175:2181 --topic test
增加topic分区
bin/kafka-topics.sh -alter --partitions 3 --zookeeper 39.99.224.175:2181 --topic test
kafka 组件基本概念:
kafka的架构:
1、partition(分区),类似rocketMQ中的 队列,随机分布在broker上面;
2、一个分区可能有多个副本,但是只有一个leader,如果leader挂了会从其他副本中选举出一个leader;
3、一个consumer只会消费固定的几个分区的数据,这个是通过负载均衡实现的;
分区数量的设置:
一个topic的各个分区是并行的,所以分区越多吞吐量越高,consumer的吞吐量除了跟consumer的数量有关还跟处理每条消息的时间有关;
并不是分区越多越好,如果一个broker挂了,需要选举的分区越多、选举的时间越长,不可用风险会增加,另外分区多主备副本间的数据复制也会延迟,根据经验,每个boker上的分区限制在100*b*r内(b指集群内boker的数量,r指副本数量);
kafka没有提供事务支持,需要开发者自行处理,要实现顺序消息有两种方式:1、设置这个topic的分区数量为1;2、发送消息时指定分区;
kafka的压测工具:
在kafka的解压目录执行下面命令,往test里发送一百万消息,每条设置1KB,throughput 用来进行限流控制,当设定的值小于 0 时不限流,当设定的值大于 0 时,当发送的吞吐量大于该值时就会被阻塞一段时间
bin/kafka-producer-perf-test.sh --topic test --num-records 1000000 --record-size 1024 --throughput -1 --producer-props bootstrap.servers=172.23.95.177:9092 acks=1
从压测结果来看,分区数到达某个值吞吐量反而开始下降,实际上很多事情都会有一个临界值,当超过这个临界值之后,很多原本符合既定逻辑的走向又会变得不同
启动zookeeper和kafka后,创建topic后就可以收发消息了,kafka使用demo(包含了使用事物消息和消费者端多线程消费):链接:https://pan.baidu.com/s/1T54H-X-U4_Q8Rn2v8BPdDA?pwd=tow7
kafka可视化工具的安装及使用:https://www.cnblogs.com/dadonggg/p/8205302.html