kafka基础知识
- kafka简介
- kafka是一个高性能、分布式的流数据平台,是一个分布式的发布-订阅系统和一个强大的队列
- 特点:
- 高性能
- 使用顺序读写磁盘的方式来存储和读取消息
- 可扩展
- 采取分布式设计(支持Server间的消息分区和分布式消费,同时保证每个partition内的消息顺序传输)
- 灵活性
- 支持多种编程语言和客户端库,方便与不同的应用程序集成
- 消费消息采取pull模式(由consumer保存offset)
- 支持online和offline场景
- 高性能
- kafka的组件概念
- Broker:
- kafka集群的中的服务器节点,处理消息的读写请求
- Topic:
- 消息的主题
- 同一个topic的消息可以分布在不同的节点上(broker)
- 一个topic包含一个或多个分区(partition)
- 每条消息都属于且一个topic
- producer发布数据时,必须指定将消息发送到哪个topic
- consumer消费数据时,也要指定订阅哪个topic的消息
- 消息的主题
- Partition:
- 每个Topic可以分为多个partition,每个partition可以看作一个有序的消息队列
- 一个partition只分布于一个broker(没有备份的情况下)
- 一个partition物理上只对应一个文件夹
- 一个partition包含多个segment
- 一个segment对应一个文件
- segment由一个个不可变记录组成
- 记录只会被append到segment,不会被删除或修改
- 清除过期日志时,直接删除一个或多个segment
- 每个Topic可以分为多个partition,每个partition可以看作一个有序的消息队列
- Segment:
- 包含消息内容的指定大小的文件
- 由index文件和log文件组成
- 一个partition由多个segment文件组成
- 包含消息内容的指定大小的文件
- Offset:
- segment文件中消息的索引值,从0开始计数
- Replica(N)
- 消息的冗余备份
- 每个partition都会有n个完全相同的冗余备份,这些备份会尽量分散存储在不同的机器上
- Producer:
- 消息和数据的生产者,可以理解为往kafka发消息的客户端
- Consumer:
- 消息和数据的消费者,可以理解为从kafka集群中获取消息的客户端。可以同时监控消息的发送
- Consumers:
- 由于kafka brokers是无状态的,因此需要Consumers来维护根据parition offset已经消费的消息数量信息
- 如果consumer确认了一个指定消息的offset,那就意味着consumer已经消费了该offset之前的所有消息
- consumer消费消息的offset值是保存在zookeeper中
- consumer可以向broker异步发起一个拉取消息的请求来缓存待消费的消息,consumers也可以通过提供一个指定的offset值来回溯或跳过partition中的消息
- Consumer Group:
- 每个consumer属于一个特定的consumer group,可为每个consumer指定group name(这是kafka用来实现topic消息的广播(发送给所有的consumer)和单播(发送给任意一个consumer的方式))
- Broker:
- kafka的安装和部署
- 单机部署
- docker 安装
- 镜像拉取不下来,添加国内源
"https://nrbewqda.mirror.aliyuncs.com"
- 拉取zookeeper和kafka
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
- 创建网络
docker network create kdfka-net
- 查看网络详细信息(注意这个后面会用到的)
docker network inspect kdfka-net
- 创建zookeeper容器
docker run --net=kdfka-net --name dev_zookeeper -p 21810:2181 -d docker.io/zookeeper
- 查看容器详情
docker inspect dev_zookeeper
- 创建kafka容器
- 安装
docker run --net=kdfka-net --name dev_kafka -p 9093:9092 --link dev_zookeeper -e KAFKA_LISTENERS=PLAINTEXT://dev_kafka:9092 -e KAFKA_ZOOKEEPER_CONNECT=dev_zookeeper:2181 -e KAFKA_ADVERTISED_PORT=9092 -d wurstmeister/kafka
- 注意配置参数
- KAFKA_ADVERTISED_HOST_NAME 宿主主机
- KAFKA_ZOOKEEPER_CONNECT zookeeper容器内部地址
- 安装
- 验证两个是否都加入网络
docker network inspect kdfka-net
- kafka启动报警
- 镜像拉取不下来,添加国内源
- docker 安装
- 单机部署
- 链接