每个应用是一个broker
每个broker中可以注册多个topic
每个topic中又可以有多个分区 topic-1、topic-2、topic-3、topic-4
每个分区又可以有多个副本,但不能超过broker的个数
这些副本中只有一个是lead,其余是follow
生产者可以指定topic去生产,消费者也可以指定topic去消费。假如一个topic下有多个partition,它的写是根据负载情况去写入的;消费者也不能去顺序消费。
每一个分区(partition)中消息都是有序的,而kafka也只能保证区内有序,不能保证每一个topic下有序,topic只是一个逻辑上的概念。
生产者发送消息,可能由于网络原因造成数据丢失,所以要kafka回复一个ack,这个ack可以设置半数同步后返回,也可以全部同步后在ack。
半数方案和全部方案
如果有一个副本延迟高,那么就会影像到整个集群。
acks参数配置
0:producer不等待ack 数据丢失
1:lead落盘后ack 数据丢失
-1:等待isr数据都同步后再ack 数据丢失、数据重复
ack可以保证数据不丢失(保证数据的可靠性),消息幂等性,由消费者自己控制。
HW和LEO保证数据一致性
消费者有一个消费者组,每个消费者组中有多个消费者,每个消费者组可以订阅一个或多个topic
生产者可以指定topic的partition去生产,消费者也可以指定topic的partition去消费(假如topic和group中只有一个的时候)
每个消费者消费的分区(partition)是不变的,这能消费分配给你的分区中的数据。只有当消费者增加或者减少的时候才会触发重新分配分区;当消费者比分区还多的时候,有的消费者是不消费数据的,可能你增加了消费者,但真正消费数据的消费者还是原来的那几个,它也是进行了重新分配,只不过命中的还是这几个。