1.为什么要使用Kafka呢?
因为数据源产生数据的速度和产生数据的规模并不是恒定的,而我们的处理逻辑基本上能够处理数据的能力上限是恒定的,并且如果直接对接数据源和我们的处理逻辑,那么后期在修改代码升级的时候会很麻烦,因此需要用消息队列进行削峰和填谷。
2.Kafka的概念
Kafka在严格意义上其实并不是消息队列,而是一种消息中间件,因为队列的要求是有序的,但是kafka只能做到分区内的数据有序(日志文件追加写入),并不能做到分区间的数据也是有序的。
3.Kafka 都有哪些特点?
高吞吐量:kafka每秒可以处理几十万条消息,每个topic的多分区设置以及消费者的消费者组设置可以对此进行保障。
可扩展性:kafka的集群可以进行热扩展。
持久性、可靠性:数据存储在磁盘。
容错性:多节点分布式存储,分区多副本。
高并发:可支持几千台节点并发读写。
这里要注意:kafka在设计中,满足了CAP理论中的AP,也就是可用性和分区容错性,而不能很好的保证C,也就是数据一致性,因此kafka也做了大量的工作来尽可能的保证数据一致性,这个后边再总结。
4.Kafka的基础架构
每一台节点都是一个broker,存储数据的叫做topic,每个topic又被分成了多个partition,每个partition又会有多个副本,并且会有一个leader副本和多个follower副本。
5.Kafka的命令行命令--Topic
1.查看topic列表
kafka-topics.sh --zookeeper node1:2181 --list
2.查看topic详细信息
kafka-topics.sh --zookeeper node1:2181 --describe --topic first
3.创建topic
kafka-topics.sh --zookeeper node1:2181 --create --topic second --partitions 3 --replication-factor 2
kafka-topics.sh --zookeeper node1:2181 --create --topic second --replica-assignment 0:1:3,1:2:6
4.删除topic
kafka-topics.sh --zookeeper node1:2181 --delete --topic first
5.修改topic(增加分区数量 只能增加 不能减少)
kafka-topics.sh --zookeeper node1:2181 --alter --topic second --partitions 4
6.动态配置 topic 参数
kafka-topics.sh --zookeeper node1:2181 --alter --topic second --config compression.type=gzip
6.Kafka的命令行命令--生产者
1.启动生产者
kafka-console-producer.sh --broker-list node1:9092 --topic second
7.Kafka的命令行命令--消费者
1.启动消费者(新开启的消费者默认会从最新的消息开始消费)
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic second --from-beginning
2.指定分区和偏移量消费
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic second --offset 1 --partiiton 2
3.消费者组(为了提高消费并行度)每个消费者最小的消费单位是分区。
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic second --from-beginning --group ben1
每次有消费者的增加或者减少,都会引起分区的重新分配。
4.消费者消费一个不存在的topic时候可以自动创建一个单分区单副本的topic
8.Kafka之消费位移的记录
未完待续....