1、安装配置
依赖于zookeeper
若之前安装过必须把zookeeper中的信息清除干净,以及日志的存储位置目录删除,集群中也必须删除。
zookeeper中删除:
brokers,cluster,contoller_epoch, isr_change_notification,consumers,latest_producer_id_block,config等
1.1 解压:
Kafka2.11-2.41: 2.11为scala版本号,2.41才是它的主版本
1.2 配置:
- 修改安装目录下配置文件:server.properties (红色是需要改的,其它部分可根据实际业务调整)
# 集群中的ID
broker.id = 0
# kafka绑定的本机的主机名
listeners=PLAINTEXT://c01:9092
# 配置外网访问
advertised.listener=PLAINTEXT://公网IP:9092
# 数据存储目录
log.dirs=/opt/data/kafka-logs
# 消息一万条刷一次
log.flush.interval.messages =10000
# 消息1000毫秒刷新一次, 即1秒刷一次
log.flush.interval.ms = 1000
# 消息的保留时间:168hour , 即7天
log.retention.hours(|minutes|ms) = 168
# 日志保留大小, -1即不使用
log.retention.bytes = -1
# 多久检查一次日志保留(默认15分钟)
log.retention.check.interval.ms = 300000
# zk的地址
zookeeper.connect = c01:2181, c02:2181, c03:2181
# rebalance等待延迟, 改为3秒
group.initial.rebalance.delay.ms = 3000
具体可参照官网的配置进行调整
- 分发到每一个分机,并修改每个分机的id,主机名
# 集群中的ID
broker.id = 0
# kafka绑定的本机的主机名
listeners=PLAINTEXT://c01:9092
- 配置环境变量到profile下
- 启动:
bin/kafka-server-start.sh config/server.properties
jps 会有kafka
netstat -nltp | grep 9092 会可以看到进程
- 集群一键启动脚本:
也可以直接写一个批量集群启动脚本:vim bin/kafka-all.sh
#!/bin/bash
if [ $# -eq 0 ]
then
echo "please input param: start stop"
else
if [ $1 = start ]
then
for i in {1..3}
do
echo "${1}ing c0${i}"
ssh c0${i} "source /etc/profile;/root/apps/kafka_2.11-2.0.0/bin/kafka-server-start.sh -daemon /root/apps/kafka_2.11-2.0.0/config/server.properties"
done
fi
if [ $1 = stop ]
then
for i in {1..3}
do
ssh c0${i} "source /etc/profile;/root/apps/kafka_2.11-2.0.0/bin/kafka-server-stop.sh"
done
fi
fi
一键启动:kafka-all.sh start
2、命令行测试操作(非正式用)
所有的操作脚本:
类似hbase,kafka也有详细的操作说明,可以参照提示进行操作即可
2.1 topic操作
- 创建topic
./kafka-topics.sh --zookeeper c01:2181,c02:2181,c03:2181 --create --replication-factor 3 --partitions 3 --topic test
参数解释:
--replication-factor 副本数量
--partitions 分区数量
--topic topic名称
- 查看当前系统中的所有topic
bin/kafka-topics.sh --zookeeper c01:2181,c02:2181,c03:2181 --list
- 删除topic
删除topic需要当前的topic参数处于启用状态:
delete.topic.enable=true
bin/kafka-topics.sh --zookeeper c01:2181,c02:2181,dc03:2181 --delete --topic test
- 查看某个topic的详情
bin/kafka-topics.sh --zookeper c01:2181,c02:2181,c03:2181 --describe --topic test
Isr: in sync replicas 同步副本
Osr: out of sync replicas 失去同步的副本(数据与leader之间的差距超过配置的阈值)
- 修改分区数(分区只可增不可减)
减少分区涉及数据的转移、日志段的拼接合并
bin/kafka-topics.sh --zookeeper c01:2181 --alter --topic test --partitions 5
- 手动指定副本的存储位置
bin/kafka-topic.sh --create
- topic的动态参数更新:动态添加与修改
# 修改test的压缩类型
bin/kafka-configs.sh --zookeeper c01:2181 --entity-type topics --entity-name test --alter -add-config compression.type=gzip
2.2 命令行producer
# 往kafka中写数据
bin/kafka-console-producer.sh --broker-list c01:9092 --topic test
>hello word
>kafka
>nihao
2.3 命令行Consumer
- 消费消息
bin/kafka-console-consumer.sh --bootstrap-servers c01:9092 --from-beginning --topic test
- # 指定要消费的分区,和要消费的起始offset
bin/kafka-console-consumer.sh --bootstrap-servers c01:9092,c02:9092,c03:9092 --topic doit14 --offset 2 --partition 0
3、生产者api操作
3.1 生产者客户端
-
配置生产者客户端参数及创建相应的生产者实例
-
构建待发送的消息
-
发送消息
-
关闭生产者实例
加入依赖:maven: kafka-clients 2.0.0
bootstrap.servers就是brokers
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;