一、创建主题的方法
在Kafka的学习和应用中,创建主题是基本功,但是在不同的教程中,会发现有以下两种方法:
一种是kafka-topics.sh --create --zookeeper <zookeeper_host>:<zookeeper_port> --replication-factor 3 --partitions 3 --topic my-topic;
另一种是kafka-topics.sh --create --bootstrap-server <broker_host>:<broker_port> --replication-factor 3 --partitions 3 --topic my-topic。
二、两种方法的区别
(一)--bootstrap-server
1.当使用Kafka命令行工具(如kafka-topics.sh)创建主题时,可以通过--bootstrap-server选项指定Kafka broker的地址。以我的集群为例,使用以下命令创建主题:
kafka-topics.sh --create --bootstrap-server hadoop04:9092,hadoop05:9092,hadoop06:9092 --replication-factor 3 --partitions 3 --topic topic-bootstrap-server
创建后,不会有提示:
注意,端口号9092在server.properties中是默认的,如果有修改,请换成自己修改后的端口号。
2.在Kafka客户端(如KafkaProducer、KafkaConsumer)的配置中,也需要设置bootstrap.servers属性来指定broker的地址。
以我的集群为例,KafkaProducer的配置会这样配:
# 配置Agent a1的sink k1的属性
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = topic-bootstrap-server
a1.sinks.k1.kafka.bootstrap.servers = 192.168.1.165:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 50
以我的集群为例,KafkaProducer的配置会这样配:
# 配置Agent a1的source s1的属性
a1.sources.s1.type = org.apache.flume.source.kafka.KafkaSource
a1.sources.s1.batchSize = 100
a1.sources.s1.batchDurationMillis = 2000
a1.sources.s1.kafka.bootstrap.servers = 192.168.1.165:9092,192.168.1.166:9092,192.168.1.167:9092
a1.sources.s1.kafka.topics = topic-bootstrap-server
a1.sources.s1.kafka.consumer.group.id = first_test
a1.sources.s1.kafka.consumer.auto.offset.reset=earliest
(二)--zookeeper
1.在早期的Kafka版本(Kafka 0.11.0.0之前)中,创建主题时可能需要通过--zookeeper选项指定Zookeeper的地址。以我的集群为例,使用以下命令创建主题:
kafka-topics.sh --create --zookeeper hadoop04:2181,hadoop05:2181,hadoop06:2181 --replication-factor 3 --partitions 3 --topic topic-zookeeper
创建好后,会有提示:
注意,端口号2181也是zoo.cfg中和server.properties中设置好的。如果有修改,请换成自己修改后的端口。刚才已经看过 server.properties,可以再看看zoo.cfg:
2.然而,在新版本的Kafka中,由于减少了对Zookeeper的依赖,直接使用--zookeeper选项来创建主题的场景已经较为少见。
3.在某些高级配置或特定情况下,可能仍然需要连接到Zookeeper进行某些操作,但这通常不是创建主题的标准做法。
三、查看
(一)怎么创建怎么查看
1.用--bootstrap-server创建的,就用--bootstrap-server查看。例如,查看刚才创建的主题,可以用以下代码:
kafka-topics.sh --list --bootstrap-server hadoop04:9092,hadoop05:9092,hadoop06:9092
结果为:
2.用--zookeeper创建的,就用--zookeeper查看。例如,查看刚才创建的主题,可以用以下代码:
kafka-topics.sh --list --zookeeper hadoop04:2181,hadoop05:2181,hadoop06:2181
结果为:
(二)任意一种都可以查看所有主题
1.从刚才两种方法查看的结果可以看出,其实都可以查询当下所有主题,为什么呢?
2.bootstrap-server提供了客户端连接Kafka集群的入口,并允许客户端获取集群的元数据,包括主题信息。而zookeeper则负责存储和管理Kafka集群的元数据,包括主题信息。因此,通过这两种方式都可以查看Kafka集群中所有的主题。
3.需要注意的是,虽然--bootstrap-server和--zookeeperr都可以用于查看主题,但它们的用途和访问方式是不同的。--bootstrap-server主要用于Kafka客户端与集群建立连接,而--zookeeper则提供了更底层的元数据管理和访问功能。
四、总结
综上,Kafka创建主题时,--bootstrap和--zookeeper都可以,但官方推荐使用Kafka的bootstrap-server来创建主题,因为这是Kafka未来发展的方向,也是更稳定、更高效的做法。
版权归原作者 mona358 所有, 如有侵权,请联系我们删除。