启动kafka ./kafka-server-start.sh -daemon …/config/server.properties
创建topic ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 2 --topic kafkatest_1.0
查看topic ./kafka-topics.sh --list --zookeeper localhost:2181
创建生产者 ./kafka-console-producer.sh --broker-list localhost:9092 --topic xxx
创建消费者./kafka-console-consumer.sh --zookeeper localhost:2181 --topic xxx
kafka两个leader:
- 集群的leader
由zookeeper负责选举,这个leader叫做KafkaController,起的作用为:负责管理整个集群中分区和副本的状态,比如partition的leader副本故障,由controller 负责为该partition重新选举新的leader副本;当检测到ISR列表发生变化,有controller通知集群中所有broker更新其MetadataCache信息;或者增加某个topic分区的时候也会由controller管理分区的重新分配工作。 - 副本的leader
几个partition数据副本只有leader一个对外提供服务,其他的只是起到备份,再leader损坏时顶上去。
zk作用:选举leader,跟跟用户共同管理offset。
- 每一个partition有几个副本,是通过KafkaController,zookeeper在kafka中
选举leader,集群中的server同时向zk注册,当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader。 - KafkaController还维护isr列表,只存储leader副本状态,长时间没更新的会被剔除出列表。
kafka pull push两种模式
kafka写快是因为,顺序写磁盘。
kafka读取快
消费者获取数据快 PageCache 还只是第一步,Kafka 为了进一步的优化性能还采用了 Sendfile 技术
一般情况下:数据 copy到内核区 再到用户区 由程序通过socket发送到内核去 Socket buffer中 在通过网卡发送。
而sendfile技术,省去与用户区交互 完成数据到内核区,发送到Socket buffer中,发送到网卡,
二,用了offset 其他消息队列要维护每条消息是否消费,耗费读写,kafka顺序写磁盘