Kafka——一个高吞吐的分布式消息系统

529 阅读2分钟

1.SparkStreaming有什么好处?

1)解耦

2)缓冲

2.消息队列常见场景

1)系统之间解耦合

2)峰值压力缓冲

3)异步通信

3.kafka的架构

4.kafka的消息存储和生产消费模型

1)一个topic分成多个partition

2)每个partition内部消息强有序,每个消息都有一个序号叫offset

3)一个partition只对应一个broker,一个broker可以管多个partition

4)消息直接写入文件,而不是存储在内存中

5)根据时间策略(默认一周)删除,而不是消费完就删除

6)producer自己决定往哪个partition写消息,可以是轮询的负载均衡,或者是基于hash的partition策略

7)consumer自己维护消费到哪个offset,每个consumer都有对应的group,group是queue消费模型

8)各个consumer消费不同的partition,一个消息在group内只消费一次,各个group各自独立消费,互不影响

5.kafka的特点

  • 消息系统的特点:生存者消费者模型,FIFO
  • 高性能:单节点支持上千个客户端,百MB/s吞吐
  • 持久性:消息直接持久化在普通磁盘上且性能好
  • 分布式:数据副本冗余、流量负载均衡、可扩展
  • 很灵活:消息长时间持久化+Client维护消费状态

6.kafka与其他消息队列对比

  • RabbitMQ:分布式,支持多种MQ协议,重量级
  • ActiveMQ:与RabbitMQ类似
  • ZeroMQ:以库的形式提供,使用复杂,无持久化
  • radis:单机、纯内存性好,持久化较差
  • kafka:分布式,较长时间持久化,高性能,轻量灵活

7.命令

1.生成topic

cd /usr/local/kafka/bin
./kafka-topics.sh --zookeeper ht-1:2181,ht-2:2181,ht-3:2181 --create --topic t0426 --partitions 3 --replication-factor 3

2.查看生成的topic

./kafka-topics.sh --zookeeper ht-1:2181,ht-2:2181,ht-3:2181 --list

3.控制台当生产者

./kafka-console-producer.sh --topic t0426 --broker-list ht-1:9092,ht-2:9092,ht-3:9092

4.控制台当消费者

./kafka-console-consumer.sh --bootstrap-server ht-1:9092 --topic t0426

5.查看topic的描述信息

./kafka-topics.sh --zookeeper ht-1,ht-2,ht-3 --describe --topic t0426

6.查看producer生产消息的最大位置

./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list ht-1:9092 --topic t0427 --time -1

7.删除topic

./kafka-topics.sh --zookeeper ht-1:2181,ht-2:2181,ht-3:2181 --delete --topic t0426

8.kafka的Leader均衡机制

当partition的leader挂掉之后,会按照副本优先原则去寻找新的leader,由新的broker来管理partition,当挂掉的leader重新启动,partition会重新由原来的broker管理

9.删除topic

1.命令删除topic,当前topic被标记删除,默认一周之后被删除 2.清除broker上当前topic的数据目录 3.去zookeeper中删除原数据 4.删除zookeeper中被标记删除的topic信息

10.SparkStreaming + Kafka 的Receiver模式

11.SparkStreaming + Kafka 的Direct模式