kafka 内部原理及实例
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 实例
生产端代码
消息端代码