kafka:消息发布队列、具有存储的功能   生产者 消费者
 优势:吞吐量高,性能好;
 具有良好的伸缩性,支持在线水平扩展;
 具有容错性和可靠性;
 与大数据生态结合
Kafka 是一个分布式系统,由服务器和客户端组成,它们 通过高性能 TCP 网络协议进行通信。 它可以部署在本地和云中的裸机硬件、虚拟机和容器上 环境。
kafka的消息是以  键值对的形式存储的
 一般是三个分区
 如果在没有指定key 的情况下,kafka 会以轮询的方式放到分区中
 指定key的情况下,会根据key放到指定的分区
 三个分区  保证当其中一个坏掉了  其他分区还能正常使用
 kafka 通过副本基本,保证数据的可靠性
 replication-factor =3  通过这个来设计副本的数量
 其中,三个分区中,其中一个当作主分区,也就是leader
 写入时 是写入到leader 中,读取的时候也是从leader 中读取的
其他两个副本我们称之为follower ,
 follower 用来从leader 中复制数据,
 broker 称之为消息代理 broker  负责消息的读写请求,
 并把消息写入到磁盘中,
 一台服务器 就是一个broker
kafka 依赖zookeeper
 所以需要先启动zookeeper  然后在启动 kafka 
kafka  必要配置项:
 1.server.properties 必要配置项
 broker.id
 log.dirs
 zookeeper.connect
2. 还有一个重要的配置项就是    监听器 listeners: 指定broker 启动时本机的监听器名称和端口号
 listeners: 指定broker 启动时的本机监听端口  ,是给服务端使用的
 advertised.listeners: 对外发布的访问ip 和 端口号, 注册到zookeeper 中,给客户端使用
3. 搭建集群环境
 此时用的是docker 部署
 一个zookeeper 对应三个kafka 的形式
 用Linux 下载
  
  通常  kafka 集群部署在内部网络
  
 4.分区是最小的并行单位,
 一个消费者可以消费多个分区
 一个分区可以被多个消费者组里的消费者消费 (是一对多的关系)
 5.重点!
 生产者 API
  生产消息、同步与异步、消息确认、重试 批量 延迟、事务
  send() 异步发送   异步发送有利于提高生产效率
  异步模型可以理解为 将 快递送到菜鸟驿站 从而提高了送货的效率
  
  另外  kafka 也支持批量发送  设置两个参数最大大小 batch.size  
  延迟时间linger.ms 满足其中一个  就会进行批量的发送
  
  配置 至多一次: Acks = 0  或 Acks = 1 
  至少一次 :Acks = -1   retries >0
  
  消费者API
  
  通常在消息中  加入唯一ID 来保证精确性
  kafka 后来加入了事务
  就是事务的原子性  : 要么全部成功  要么全部失败
  
  isolation-level 事务级别  默认情况下
  default : read_uncommitted  未提交的情况下 也可以读取  也就是脏读
  
  6.kafka 的序列化 和  反序列化
  就是将对象以二进制的方式在网络之间传输或者保存到文件中,
  并可以根据特定的规则进行还原
  object > 二进制  是指的序列化
  二进制 > object  是指的反序列化
  
  优点:节省空间,提高网络传输效率,跨平台,跨语言