作者:mobiledu2502912017 | 来源:互联网 | 2023-02-05 19:59
kafka通过zk选举leader以及在消费组变化时进行负载均衡生产者使用push(推)模式将消息发布到broker消费者用pill(拉)模式从broker订阅发布消息主题(top
- kafka通过zk选举leader以及在消费组变化时进行负载均衡
- 生产者使用push(推)模式将消息发布到broker
- 消费者用pill(拉)模式从broker订阅发布消息
主题( topic):
- 消息在进入 kafka集群的时候,是以主題进行数据归納【一条消息必须属于某一个主题】。
- 在 kafka集群中,可以有无数的主题
- 从生产者的角度来说,他所操作的单元,一般情况下是以主题为单位
- 从消者的角度来说,也所操作的单元,一般情况也是以主题为单位。
- 生产者、消费者可以以主題更细单位来操作ー->(分区) 也是消息的分类。
- 从 kafka的角度来说,没有限制生产者也没有限制消费者。
- 生产者与消费者在处理数据的时候,必须要知道要操作的主題是哪一个
创建属于我们自己的主题
-
一个 broker服务下,是否可以创建多个分区?
可以, broker数与分区数没有关系。
-
一个 broker服务下,是否可以创建多个复本因子?
不可以。但报错
-
replication factor: 3 larger thanavailable brokers: 创建主题时,复本因为应该小于等于可用的broker数。
katka-topics. sh --create --topic mytopic5 --zookeeper localhost: 2181 --partitions 3–replication-factor 1–config max message bytes=64000 --config flush messages=1
查看当前有哪些主题
kafka-topics. sh --describe--zookeeper localhost: 2181
结果
Topic: mytopic5 Partitioncount: 3 Replicationfactor: 1 Configs: max message bytes 64000, flush messages.1
Topic: mytopic5 Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: mytopic5 Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: mytopics Partition: 2 Leader: 0 Replicas: 0 Isr: 0
在 kafka中每一个分区会有一个编号:从0开始
- leader: broker.id=0,因为在 kafka中如果有多个复本的话,就会存在leader与 follower的关系。表示当前这个复本为leader所在的 broker是哪一个。
- Replicas:所有的复本列表0,1,2
- Isr:可用列表数0,2
命令
可以只看主题名称: kafka- topics.sh-1st-- zookeeper localhost:2181
修改
kafka-topics. sh --zookeeper localhost: 2181--alter--topic mytopic5--partitions 40
修改增加配置参数
kafka-topics. sh - -zookeeper localhost: 2181–alter–topic mytopic4 --config flush messages=l
刚除配置参数
kafka-topics. sh --zookeeper localhost: 2181--alter --topic mytopic4 --delete-contig flush.messages
刚除
cafka-topics. sh --zookeeper localhost: 2181 --delete --topic mytopic4
Topic mytopic4 is marked for deletion
当执行删除命令之后, topic不是物理別除,而是一个标记删刚除的操作。只有重启kafka才会删除
mytopic4 -marked for deletion
标记删除之后的主题是否还可以继续
可以,不会影响
分区
上面图示
分区中的数据都有相应的编号,偏移量offset
- 记录当前有多少记录数
- 消费者知道自己消费到什么地方
- 消费者可以自定义选择消费某一条消息(手动消费可以多次消费,自动消费不可以)
副本
分区下的副本因子
创建副本因子的时候,副本困子数应该小于等于可用的 broker数。
副本因为操作的单位是分区为单位
当有多个副本数时, kafka并不是将多个副本同时对外提供读取和写入!
作用是让 kafka读取和写入数据时的高可
副本因子数是包含本身1同一个副本因子不能放在同一个 Broker中。
在有多个副本的情況下, kafka会为同一个分区下的分区,设定角色关系:一个1 eader和N个fo11ower
leader负责与外面(生产者、消贾者)的角色,进行读写处理。
如果某一个分区有三个副本因子。就算其中一个挂掉,那么只会在剩下的两个中,选择一个1 eader
但不会在其它的 broker中,另启一个副本【因为在另一台启动的话,存在数据传递。只要在主机之间有数据传递,就会长时间占用网络IO。但是 kafka是一个高吞吐量的消息系统,这种情況不允许发生】所在不会在另一个 broker中启动。
如果所有的副本都挂了!生产者如果生产的数据是指定分区的话,将写入不成功。
ISR:当前可用副本。
ack机制:确认机制
zookeeper