基本的操作和管理
##
列出所有主题
kafka-topics.bat --zookeeper localhost:2181 --list
##
列出所有主题的详细信息
kafka-topics.bat --zookeeper localhost:2181 --describe
##
创建主题 主题名
my-topic
,
1
副本,
8
分区
kafka-topics.bat --zookeeper localhost:2181 --create --topic my-topic --replication-factor 1 --partitions 8
##
增加分区,注意:分区无法被删除
kafka-topics.bat --zookeeper localhost:2181 --alter --topic my-topic --partitions 16
##
删除主题
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic hello-topic-12 --partitions 3
kafka-topics.bat --zookeeper localhost:2181 --delete --topic my-topic
##
创建生产者(控制台)
kafka-console-producer.bat --broker-list localhost:9092 --topic my-topic
##
创建消费者(控制台)
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic my-topic --from-beginning
##
列出消费者群组(仅
Linux
)
kafka-topics.sh --new-consumer --bootstrap-server localhost:9092 --list
##
列出消费者群组详细信息(仅
Linux
)
kafka-topics.sh --new-consumer --bootstrap-server localhost:9092 --describe --group
群组名
Broker
配置
配置文件放在
Kafka
目录下的
config
目录中,主要是
server.properties
文件
常规配置
broker.id
在单机时无需修改,但在集群下部署时往往需要修改。它是个每一个
broker
在集群中的唯一表示,要求是正数。当该服务器的
IP
地址发生改变时,
broker.id
没有变化,则不会影响
consumers
的消息情况
listeners
监听列表
(
以逗号分隔 不同的协议
(
如
plaintext,trace,ssl
、不同的
IP
和端口
)),hostname
如果设置为
0.0.0.0
则绑定所有的网卡地址;如果
hostname
为空
则绑定默认的网卡。如果
没有配置则默认为
java.net.InetAddress.getCanonicalHostName()
。
如:
PLAINTEXT://myhost:9092,TRACE://:9091
或
PLAINTEXT://0.0.0.0:9092,
zookeeper.connect
zookeeper
集群的地址,可以是多个,多个之间用逗号分割。(一组
hostname:port/path
列表
,hostname
是
zk
的机器名或
IP
、
port
是
zk
的端口、
/path
是可选
zk
的路径,如果不指定,默认使用根路径)
log.dirs
Kafka
把所有的消息都保存在磁盘上,存放这些数据的目录通过
log.dirs
指定。可以使用多路径,使用逗号分隔。如果是多路径,
Kafka
会根据“最少
使用”原则,把同一个分区的日志片段保存到同一路径下。会往拥有最少数据分区的路径新增分区。
num.recovery.threads.per.data.dir
每数据目录用于日志恢复启动和关闭时的线程数量。因为这些线程只是服务器启动(正常启动和崩溃后重启)和关闭时会用到。所以完全可以设置
大量的线程来达到并行操作的目的。注意,这个参数指的是每个日志目录的线程数,比如本参数设置为
8
,而
log.dirs
设置为了三个路径,则总共会启动
24
个线程。
auto.create.topics.enable
是否允许自动创建主题。如果设为
true
,那么
produce
(生产者往主题写消息),
consume
(消费者从主题读消息)或者
fetch metadata
(任意客户端
向主题发送元数据请求时)一个不存在的主题时,就会自动创建。缺省为
true
。
主题配置
新建主题的默认参数
num.partitions
每个新建主题的分区个数(分区个数只能增加,不能减少 )。这个参数一般要评估,比如,每秒钟要写入和读取
1000M
数据,如果现在每个消费者
每秒钟可以处理
50MB
的数据,那么需要
20
个分区,这样就可以让
20
个消费者同时读取这些分区,从而达到设计目标。(一般经验,把分区大小限制在
25G
之内比较理想)
如何删除kafka的主题
新版kafka的consumer由kafka自己管理,因此在删除topic时,只需要处理跟topic相关的节点。
0、前置条件:server.properties设置 delete.topic.enable=true
1、如果需要被删除topic 此时正在被程序 produce和consume,则这些生产和消费程序需要停止。
2、使用kafka/bin目录下的命令行工具预删除:
./bin/kafka-topics --delete --zookeeper 【zookeeper server:port】 --topic 【topic name】
这一步执行完之后,节点被标记为删除,并没有物理删除。
3、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/data/kafka-logs")相关topic的数据目录。
4、 删除zookeeper里的topic信息:
bin/zkCli.sh -server 【zookeeper server:port】
登录到zk shell,然后找到topic所在的目录:ls /brokers/topics,找到要删除的topic,然后执行命令:
rmr /brokers/topics/【topic name】
rmr /admin/delete_topics/【topic name】
5、重启zk和kafka