Kafka笔记二之Topic操作,文件参数配置

本文介绍Kafka中主题的创建、查询、修改及删除等操作,并详细解析了Kafka生产者、消费者的使用方法及关键配置参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下的例子我只启动了一个shb01,没有加入139

主题Topic的一般操作(增删改查),通过脚本kafka-topics.sh来执行

创建

[root@shb01 bin]# kafka-topics.sh --create--topic hello --zookeeper shb01:2181 --partition 2 --replication-factor 1

Created topic "hello".

 

--partition 2表示分区

--replication-factor 1表示副本因子,之前说过broker无主副之分但是partition有主副之分,所以此参数的值不能大于broker数就是kafka服务节点数,我的例子中只有一个shb01节点所以如果指定2会报错的。

 

查询

[root@shb01 bin]# kafka-topics.sh --list--zookeeper shb01:2181

hello

 

也可以指定topic

[root@shb01 bin]# kafka-topics.sh --list --zookeepershb01:2181 --topic hello

 

查询指定topic详细信息

[root@shb01 bin]# kafka-topics.sh--describe --zookeeper shb01:2181 --topic hello

Topic:hello     PartitionCount:2        ReplicationFactor:1     Configs:

       Topic: hello    Partition: 0    Leader: 0       Replicas: 0     Isr: 0

       Topic: hello    Partition: 1    Leader: 0       Replicas: 0     Isr: 0

 

我只有一个broker,id为0

Leader: 0,Partition的leader所在broker的id

Replicas: 0,Partition的副本的brokerlist

Isr: 0,表示可用的broker的id

 

查询topic详细信息

[root@shb01 bin]# kafka-topics.sh--describe --zookeeper shb01:2181

 

修改,只能增加partition数量不能减少

[root@shb01 bin]# kafka-topics.sh  --alter --zookeeper  shb01:2181 --topic hello --partition 3

[root@shb01 bin]# kafka-topics.sh--describe --zookeeper  shb01:2181--topic hello

Topic:hello     PartitionCount:3        ReplicationFactor:1     Configs:

       Topic: hello    Partition: 0    Leader: 0       Replicas: 0     Isr: 0

       Topic: hello    Partition: 1    Leader: 0       Replicas: 0     Isr: 0

       Topic: hello    Partition: 2    Leader: 0       Replicas: 0     Isr: 0

 

 

删除

[root@shb01 bin]# kafka-topics.sh --delete--zookeeper shb01:2181 --topic hello

删除只是标记删除,此topic仍然可用,需要修改server.properties文件中的参数

delete.topic.enable=true开启删除然后重启kafka,此参数在文件中默认是没有的需要手动加入


生产者,消费者

Kafka自带的生产者和消费者只是用来测试

生产者

[root@shb01 bin]# kafka-console-producer.sh--broker-list shb01:9092 --topic topic_shb01

--broker-list表示broker地址,多个地址用逗号分开

--topic 表示向那个主题生产消息

 

 

消费者

[root@shb01 bin]# kafka-console-consumer.sh--topic topic_shb01 --zookeeper shb01:2181,192.168.79.139:2181 --from-beginning


--topic表示消费那个主题

topic\whitelist\blacklist:

1、  具体的单个topic

[root@shb01 bin]# kafka-console-consumer.sh--topic topic_shb01 --zookeeper shb01:2181,192.168.79.139:2181 --from-beginning

 

2、多个白名单topic字符串[逗号隔开]。

         --topic  t1,t2表示只消费t1,t2主题

         [root@shb01bin]# kafka-console-consumer.sh --whitelist t1,t2 --zookeepershb01:2181,192.168.79.139:2181 --from-beginning

 

3、多个黑名单topic字符串[逗号隔开]。

         --topic  t1,t2表示除过t1,t2主题之外消费所有主题

[root@shb01bin]# kafka-console-consumer.sh --blacklist t1,t2 --zookeepershb01:2181,192.168.79.139:2181 --from-beginning

 

--zookeeper表示kafka集群的zk地址

--from-beginning表示从前开始,就是启动消费者之前生产的消息也可以消费

 

最后被标记删除的主题也可以消费

 

文件参数配置

broker,server.propertie

1.生产者生产发送消息,broker缓存数据达到一定阀值或一定时间后就会flush到磁盘中这样可以减少IO调用。在config目录下的server.properties中有两个参数用于控制flush

# The number of messages to accept beforeforcing a flush of data to disk

#log.flush.interval.messages=10000

 

# The maximum amount of time a message cansit in a log before we force a flush

#log.flush.interval.ms=1000

 

2.kafka数据被消费后会依然存在于磁盘中,消费者配合zookeeper读取数据,通常数据会保存168小时,可以在server.properties中通过参数进行控制

# The minimum age of a log file to beeligible for deletion

log.retention.hours=168

#log.retention.bytes=1073741824

第一个是168小时,第二个参数是按照大小超过则删除

log.retention.check.interval.ms=300000

这个是扫描的间隔时间,满足上面两个条件(貌似是二选一)则执行删除

 

 

生产者,producer.properties

1.Producer可以指定将消息发送给具体的partition.在配置文件中通过partitioner.class指定自定义分区器。包含包名类名

partitioner.class= kafka.ProducerTest

 

2.通过producer.type=sync参数控制生产者使用异步或同步方式发送数据。

异步或者同步发送

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据的通讯方式。 

异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据的通讯方式。

 

3.生产者采用异步方式可以提高发送效率,先将数据缓存在磁盘然后一次性发送出去。

有两个参数来控制什么时候发送消息,一个按照时间间隔另一个按照数据大小

# maximum time, in milliseconds, forbuffering data on the producer queue

#queue.buffering.max.ms=

 

# the maximum size of the blocking queuefor buffering on the producer

#queue.buffering.max.messages=

 

 

消费者,consumer.properties

Kafka中每个消费者都属于一个group且都已一个组id

消费数据

组内:一个消费者可以消费多个partition,但是一个topic下的partition只能被一个group中的一个消费者消费。下图中group2中有4个消费者但是topic2种只有3个分区此时c4处于空闲状态。此时可以增减topic2的分区数来增加消费能力。


组间:每个消费组之间消费同一份数据互不影响。

业务复杂增加topic,数据量大增加分区。分区越多意味着consumer的消费能力越强。

 

 

Message是通信的基本单位存储于topic的分区中,parttion在存储层面表现为一个append.log文件,新的message会直接追加到文件尾部,每条消息在文件中的位置称为offset(偏移量)这个信息存储在zookeeper中,所以消费者在读取message时需要zk配合。Message有类型大小偏移量3个属性,其中offset相当于message在分区中的id


下面是一个查看offset的命令,这个例子我在资料中找的,没有实际操作过

bin/kafka-run-class.shkafka.tools.ConsumerOffsetChecker --zookeeper zkserver1:2181,zkserver2:2181--group consumer_demo_11

 

kafka不能指定offset进行消费

kafka集群容错

kafka集群中一个broker挂了后zk会选择让别的broker提供服务,当有broker被修复后zk会有一个自动的均衡策略让此broker再次成为topic中partition的leader

topic:hello    partition:0    leader:0

topic:hello    partition:1    leader:2

topic:hello    partition:2    leader:1

 

此参数指定自动均衡策略,300秒后kafka执行均衡操作

Auto.leader.rebalance.enable=true

leader.imbalance.check.interval.seconds 默认值:300。

 

也可以手动执行

bin/kafka-preferred-replica-election.sh--zookeeper zkserver1:2181,zkserver2:2181


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值