- 概述
消息中间件 - 创建topic
kafka-topics.sh --create --zookeeper 192.168.92.200:2181,192.168.92.201:2181,192.168.92.202:2181/kafka --replication-factor 3 --partitions 3 --topic ruozedata
- tipoc 主题
- partitions 3个分区,下表从0开始,是一个物理上的分区
- replication 3个副本,一个分区被复制成3份
举例:3台机器
分区 | hadoop001 | hadoop002 | hadoop003 |
---|---|---|---|
0分区 | ruozedata-0 | ruozedata-0 | ruozedata-0 |
1分区 | ruozedata-1 | ruozedata-1 | ruozedata-1 |
2分区 | ruozedata-2 | ruozedata-2 | ruozedata-2 |
- 查看topic详细信息
kafka-topics.sh --describe --zookeeper 192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka --topic test
Topic:test | PartitionCount:3 | ReplicationFactor:3 | Configs: |
---|---|---|---|
Topic: test | Partition: 0 | Leader: 1 | Replicas: 1,3,2 Isr: 1,3,2 |
Topic: test | Partition: 1 | Leader: 2 | Replicas: 2,1,3 Isr: 2,1,3 |
Topic: test | Partition: 2 | Leader: 3 | Replicas: 3,2,1 Isr: 3,2,1 |
第一行列出了这个topic的总体情况,如topic名称,分区数量,副本数量等。
第二行开始,每一行列出了一个分区的信息,如它是第几个分区,这个分区的leader是哪个broker,副本位于哪些broker,有哪些副本处理同步状态。
Partition: 分区 下标是从0开始
Leader : 负责读写指定分区的节点
Replicas (静态描述): 复制该分区log的节点列表
Isr(动态描述) : “in-sync” replicas,当前活跃的副本列表(是一个子集),并且可能成为Leader
若此时kill掉一个机器,hadoop003 ,broker(kafka实例)是3。那么zookeeper会重新再Isr列表中选举出leader。若选举出的leader的broker为2。则会展示为如下:
Topic:test | PartitionCount:3 | ReplicationFactor:3 | Configs: |
---|---|---|---|
Topic: test | Partition: 0 | Leader: 1 | Replicas: 1,2 Isr: 1,2 |
Topic: test | Partition: 1 | Leader: 2 | Replicas: 2,1 Isr: 2,1 |
Topic: test | Partition: 2 | Leader: 2 | Replicas: 2,1 Isr: 2,1 |
- 删除topic
- 1、执行–delete
kafka-topics.sh --delete --zookeeper 192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka --topic test
- 2、删除zookeeper对应文件对应的文件
zkCli.sh 进入zookeeper·。
删除:
rmr /kafka/config/topics/test
rmr /kafka/brokers/topics/test
rmr /kafka/admin/delete_topics/test - 3、删除logs下对应的分区
删除各个磁盘的test的文件夹
rm -rf $KAFKA_HOME/logs/test-*
- 注意:
- delete.topic.enable=true 在版本0.10.x中无效
- 删除topic之后,重新创建相同的topic在logs目录下看不到对应的分区,重启一下kafka集群就可以了(晚上业务低谷重启)。
- 修改topic(改变分区数)
- 注意:
kafka-topics.sh --alter --zookeeper 192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka --topic test --partitions 4
注意:
- 分区数只能改大,不能改小。
分区个数设计
一般生产上:
–replication-factor 3 –partitions 3
–partitions 取决于你的broker数量
It provides simple parallelism, 1:1 correspondence between Kafka partitions
and Spark partitions, and access to offsets and metadata.
建议与spark分区数1:1注意
1、虽然我们增加了分区数,提高kafka的写和读的吞吐量,但是假如一个集群多个topic,多个分区,必然一台机器上有多个 ruozedata-0 test-0 jepson-0 ,就需要更多的文件数(进程数),那就要调优。调大linux服务器的文件数和进程数。
2、一个消费组可以包含一个或多个消费者,分区只能被一个消费组的其中一个消费者去消费正常在企业开发使用多分区方式去提高计算的能力。如下图:kafka有序
考虑根据业务字段createtime排序,但是在spark中,排序之后DF数据会有丢失。offset(偏移量)丢失。偏移量指的是,消费者在读取一个分区的文件数据,数据所在的分区下标。若泽数据线下班讲解。