kafka介紹
Kakfa起初是由LinkedIn公司開發的一個分布式的消息系統,它使用Scala編寫,后成為Apache的一部分,支持多種客戶端語言(C++,JAVA,python)
目前越來越多的開源分布式處理系統如Cloudera、Apache Storm、Spark等都支持與Kafka集成。
具有高水平擴展性、高容錯性、訪問速度快、分布式等特性
內部原理深度解析
1.producer: 生產者發布消息到 kafka 集群。生產者根據指定算法將消息發送到partition中
2.consumer:消費者從 kafka 集群中消費消息。kafka中跟別的消息隊列不一樣的是consumer端記錄offset(偏移量)
3.broker: 每一個broker可以理解為kafka 集群中一台服務器。
4.topic: kafka 集群的消息類別,即 kafka 是面向 topic 的。
5.partition: 每個 topic 包含一個或多個 partition。 Partition都是有序的,每個個consumer以partition為單位進行消費的。
6.Consumer group:每個 consumer 都屬於一個 consumer group,在同一個 consumer group 中的一個 Consumer 不能消費同一個partition,
但不同consumer group Consumer 還是可以消費同一個partition
7.replica: partition 的副本,保障 partition 的高可用。
8.leader: replica 中的一個角色, producer 和 consumer 只跟 leader 交互。
9.follower: replica 中的一個角色,從 leader 中復制數據。
10.zookeeper: kafka 通過 zookeeper 管理元數據(meta) 信息,集群管理,Leader 選舉
常用命令
./bin/zookeeper-server-start.sh ./config/zookeeper.properties & // 起動kafka 之前要先啟動zookeeper
./bin/kafka-server-start.sh ./config/server.properties & //起動kafka
./bin/kafka-server-stop.sh 停掉kafka
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topicname 創建tipoc replication-factor:指有同個備份
./bin/kafka-topics.sh --list --zookeeper localhost:2181 查看tipic
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topicnametest 生產端生產消息
./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topicnametest --from-beginning 消費者消息消息,從頭消費
kafka 實例
生產端代碼
消息端代碼