如何在kafka中创建topic

如何在kafka中创建topic

在使用kafka发送消息和消费消息之前,必须先要创建topic,在kafka中创建topic的方式有以下3种:

  1. 如果kafka broker中的config/server.properties配置文件中配置了auto.create.topics.enable参数为true(默认值就是true),那么当生产者向一个尚未创建的topic发送消息时,会自动创建一个num.partitions(默认值为1)个分区和default.replication.factor(默认值为1)个副本的对应topic。不过我们一般不建议将auto.create.topics.enable参数设置为true,因为这个参数会影响topic的管理与维护。
  2. 通过kafka提供的kafka-topics.sh脚本来创建,并且我们也建议通过这种方式(或者相关的变种方式)来创建topic。
  3. kafka的0.10版本之前,可以使用内置的kafka-admin包,后续提供了专门的类AdminClient API来进行API层面上的topic创建。

脚本创建的实质

通过 kafka-topics.sh 脚本来创建一个名为topic-test1并且副本数为2、分区数为4的topic。(如无特殊说明,本文所述都是基于1.0.0版本。)

bin/kafka-topics.sh --create --zookeeper 192.168.0.2:2181/kafka100 --topic topic-test1 --replication-factor 2 --partitions 4

打开kafka-topics.sh脚本一探究竟,其内容只有一行,具体如下:

exec $(dirname $0)/kafka-run-class.sh kafka.admin.TopicCommand "$@"

这个脚本的主要作用就是运行 kafka.admin.TopicCommand。在main方法中判断参数列表中是否包含有create,如果有,那么就实施创建topic的任务。

创建topic时除了需要zookeeper的地址参数外,还需要指定topic的名称、副本因子replication-factor以及分区个数partitions等必选参数 ,还可以包括disable-rack-aware、config、if-not-exists等可选参数。

partion:topic的数据内容被划分为几块存储
replication-factor: 物理存储topic的内容采用几个副本的容错策略

topic命令时的警告

创建topic的时候,如果名称中包含.或者_,kafka会抛出警告。原因是:

在Kafka的内部做埋点时会根据topic的名称来命名metrics的名称,并且会将句点号 . 改成下划线_。假设遇到一个topic的名称为topic.1_2,还有一个topic的名称为topic_1.2,那么最后的metrics的名称都为topic_1_2,所以就会发生名称冲突。

命名规则

     topic的命名不推荐(虽然可以这样做)使用双下划线__开头,因为以双下划线开头的topic一般看作是kafka的内部topic,比如__consumer_offsets__transaction_state

topic的名称必须满足如下规则:

  • 由大小写字母、数字、.-_组成
  • 不能为空、不能为.、不能为..
  • 长度不能超过249

你可能感兴趣的:(kafka,java,分布式)