Kafka-配置&命令

《Kafka权威指南》学习笔记

kafka安装配置

broker配置

  • broker.id:每个broker都需要有一个标识符,使用broker.id来表示。它的默认值是0,也可以被设置成其他任意整数。这个值在整个Kafka集群里必须是唯一的。
  • potr:默认9092,可以指定任意端口号。(如果需要1024以下端口号,需要root权限)
  • broker.rack:机架信息。broker所在机架。
  • zookeeper.connecthostname:port/path,hostname2:port/path...,path可以不指定,默认为根路径/
  • log.dirs:Kafka把所有消息都保存在磁盘上,存放这些日志片段的目录是通过log.dirs指定的。它是一组用逗号分隔的本地文件系统路径。

如果指定了多个路径,那么broker会根据“最少使用”原则,把同一个分区的日志片段保存到同一个路径下。要注意,broker会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。

  • num.recovery.threads.per.data.dir:对于如下3种情况,Kafka会使用可配置的钱程池来处理日志片段
    • 服务器正常启动,用于打开每个分区的日志片段
    • 服务器崩愤后重启,用于检查和截短每个分区的日志片段:
    • 服务器正常关闭,用于关闭日志片段。

默认情况下,每个日志目录只使用一个线程。因为这些线程只是在服务器启动和关闭时会用到,所以完全可以设置大量的线程来达到井行操作的目的。特别是对于包含大量分区的服务器来说,一旦发生奔溃,在进行恢复时使用井行操作可能会省下数小时的时间。设置此参数时需要注意,所配置的数字对应的是log.dirs指定的单个日志目录。也就是说,如果设置为8,井且log.dir指定了3个路径,那么总共需要24个线程。

  • auto.create.topics.enable:Kafka会在如下几种情形下自动创建主题:
    • 当一个生产者开始往主题写入消息时。
    • 当一个消费者开始从主题读取消息时。
    • 当任意一个客户端向主题发送元数据请求时。

主题的默认配置

  • num.partitions:参数指定了新创建的主题将包含多少个分区。

  • log.retention.ms:根据时间来决定数据可以被保留多久。默认使用log.retention.hours参数来配置时间,默认值为168小时,也就是一周。
    还有其他两个参数:log.retention.minuteslog.retention.ms,推荐使用log.retention.ms,若三个配置存在多项,则取值最小的那个。

  • log.retention.bytes:根据保留消息字节数来判断消息是否过期,作用在每一个分区上。。

  • log.segment.byteslog.segment.ms:控制日志片段大小或存活时间。

  • message.max.bytes:参数来限制单个消息的大小默认值是l000000,也就是lMB。


Kafka命令

启动服务

# 设置变量,开启JMX
> export JMX_PORT=9988 
> ./kafka-server-start.sh  -daemon ../config/server.properties
进入zk,查看启动的代理
>ls /brokers/ids 

主题

#创建topic
> ./kafka-topics.sh --create --zookeeper s159:2181,s162:2181,s163:2181 --replication-factor 1 --partitions 1 --topic test

#列出topic
> ./kafka-topics.sh --list --zookeeper s159:2181,s162:2181,s163:2181

#描述主题
> ./kafka-topics.sh --describe --zookeeper s159:2181,s162:2181,s163:2181

#删除主题,
a.必须配置 delete.topic.enable=true
b.> ./kafka-topics.sh --delete --zookeeper s159:2181,s162:2181,s163:2181 --topic test
进入zk, 
c. > rmr /brokers/topics/{topic_name}';
    > rmr /config/topics/{topic_name}';

批量删除topic指令:

./kafka-topics.sh --list --zookeeper s159:2181,s162:2181,s163:2181|grep 'test*' | xargs -n1  ./kafka-topics.sh --delete --zookeeper s159:2181,s162:2181,s163:2181 --topic

主题增加分区
假设有主题scada仅有一个分区,现需要扩展为8个分区,则使用如下命令,

./kafka-topics.sh --alter --zookeeper s159:2181,s162:2181,s163:2181 --topic scada --partitions 8

,后查看topic分区详情:
在这里插入图片描述

修改分区复制系数
从上图看,目前分区的复制系数为1,现需要扩展为3,针对每一个分区都要做如下配置。

{"partitions" : [
        {
        	"topic" : "scada",
            "partition": 0 ,
            "replicas":[0,1,2]     
        },
        {
        	"topic" : "scada",
            "partition": 1 ,
            "replicas":[1,0,2]     
        },
        {
        	"topic" : "scada",
            "partition": 2 ,
            "replicas":[2,0,1]     
        },
        {
        	"topic" : "scada",
            "partition": 3 ,
            "replicas":[0,1,2]     
        },
        {
        	"topic" : "scada",
            "partition": 4 ,
            "replicas":[1,2,0]     
        },
        {
        	"topic" : "scada",
            "partition": 5 ,
            "replicas":[2,1,0]     
        },
        {
        	"topic" : "scada",
            "partition": 6 ,
            "replicas":[0,2,1]     
        },
        {
        	"topic" : "scada",
            "partition": 7 ,
            "replicas":[1,0,2]     
        }
    ],
    "version" : 1
}

另存为a.json,
使用--verify命令校验json配置:

./kafka-reassign-partitions.sh --zookeeper s159:2181 --verify  --reassignment-json-file a.json

可能会出现如下提示:如下图:
在这里插入图片描述
ERROR: Assigned replicas (0) don't match the list of replicas for reassignment (0,2,1) for partition scada-0这类问题可直接忽略。
直接执行--execute执行配置即可:

./kafka-reassign-partitions.sh --zookeeper s159:2181 --execute  --reassignment-json-file a.json  

执行成功后,topic的分区信息如下:

在这里插入图片描述


kafka客户端

#发送消息(Provider)
./kafka-console-producer.sh --broker-list s159:9092 --topic test
---host:port 指的是具体kafka服务

#消费消息(Consumer)
> ./kafka-console-consumer.sh --bootstrap-server s159:9092 --topic test --from-beginning

猜你喜欢

转载自blog.csdn.net/it_freshman/article/details/83115740