1.命令
启动:
zookeeper:
bin/zkServer.sh start
kafka:
bin/kafka-server-start.sh -daemon config/server.properties
查看topic:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
查看消费者组:
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
创建topic:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --replication-factor 1 --partitions 1 --topic xxx
启动生产者:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic xxx
启动消费者:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic xxx --from-beginning
2.核心概念
1.Broker
集群中的一个实例,多个broker中有一个是leader,其他都是follower
2.Consumer Group
同一个group的consumer可以并行消费同一个topic的消息,但是不会重复消费(相当于多个线程去消费,提高了消费速度)
如果同一个topic需要被多次消费,可以设多个consumer group来实现,分别消费互不影响
3.Topic
特定主题,区别不同消息的类型,消息以主题为单位进行归类
4.Partition
Kafka采用分区方式让消费者并行消费,提高吞吐能力,每个分区有多个副本保证高可用
一个分区只能被同组的一个consumer消费,但是一个consumer可以消费多个分区
消费效率最高的情况是分区数和consumer数量相同,每个consumer消费一个分区
当consumer数量大于分区数的时候,就会有consumer闲置
5.Replication
副本存在leader和follower之分,活跃的称为leader,其他的是follower
每个分区都有多个副本,只有一个是leader,其他是follower
消息进来先存入leader,然后从leader复制到follower,只有复制全部完成,consumer才可以消费此条消息,消费也是从leader读取
由于leader做了大量工作,如果不同分区的leader replication在集群的broker上分布不均匀,就会造成负载不均衡
Kafka通过轮询算法保证leader均匀分布
副本均匀分布在broker上,同一个分区的副本不会在同一个broker上
同一个分区的副本数不能多于broker数量,没有意义
6.分区平衡
AR:assigned replication 已分配副本,每个分区都有自己的AR列表,里面存储这个分区最初分配的所有副本,AR列表不会变化,除非增加分区
PR:优先副本,AR列表中的第一个副本就是优先副本,而且永远是优先副本,最初的时候优先副本和leader副本是同一个
ISR:in sync replication 同步副本,每个分区有自己的ISR列表,会根据同步情况动态变化
最初ISR和AR列表一致,如果某个节点挂掉,或者某个节点的follower副本落后leader副本太多,就会被从ISR列表移除,此时ISR和AR就不再一致
同步滞后过多的副本组成OSR Out-of-Sync Replicas
分区平衡操作其实就是让leader副本和优先副本保持一致的操作
7.分区读写
每个分区都是有序不可变的
Kafka只能保证分区的消费顺序,不能保证topic消费顺序
consumer可以重置offset到之前的位置,可以以任何顺序消费,不一定线性后移
8.Producer
消息生产者,向broker发送消息
9.Consumer
消费者,从broker拉取消息