kafka 支持 集群 、负载均衡、动态扩容。
但是不支持事务(事务最早是出现在数据库中表示一个或多个操作要么一起成功要么一起失败,在分布式消息队列中就是发送多条消息,要么全部成功,要么全部失败。)
kafka的动态扩容是用zoorkeeper完成的。
AMQP协议:Advanced Message Queuing Protocol 。
消费者(Consumer): 从消息队列中请求消息用于消费的客户端应用程序。
生产者(Producer): 想broker(中间,代理)发布消息的客户端应用程序。
AMQP服务器端(broker):用于接收生产者发送的消息并将这些消息路由给服务器中的队列。
因为kafka支持java。 所以我们可以用java 编写生产者和消费者。
架构 : producer 集群向 broker发送消息,然后由consumer集群消费消息。
主题(topic): 一般这个我们按项目中的业务来分为一个主题,比如我们在交易系统中,关于交易的信息我们可以放入在一个trade的topic中。
分区(Partition): 一个topic中的消息按照多个分区组织,分区是kafka消息队列组织的最小单位,一个分区可以看作是一个FIFO的队列。(kafka分区是用于提高kafka性能的关键,当发现kafka的性能不高时,增加kafka的topic 分区是一种提高性能的手段。)
如上图所示:
备份(replication) :3个broker中存储了不同分区的数据进行备份,每个分区的数据都会备份在两个broker上避免宕机(备份在多少个broker上面是由我们自己配置的。),从而保证了分布式的可靠性。
zookeeper:一个提供分布式状态管理、分布式配置管理、分布式锁服务等的集群。