Kafka部署环境:
本地开发电脑(window7)
开启一个zookeeper服务(localhost:2181)
开启两个kafka服务(localhost:9092、localhost:9093)
创建一个Topic(smallcat-topic)两个分区两个复制集
创建一个生产者
创建一个消费者
一、观察其运行流程
1、 kafka服务的开启与关闭,都会与zookeeper交互。zookeeper会监控其的连接状态
2、 kafka服务之间会互相交互。当一个kafka服务断掉之后,如下
kafka.server.ReplicaFetcherThread会连接失败。kafka集群还可以正常运行。当失败的服务重新连接成功后,分区与复制还会恢复执行。将丢失的数据从别的服务器中恢复回来。
3、 一般情况下,每个kafka服务会负责一个leader分区和其他服务的follow分区。来保证kafka的负载均衡:
当一个kafka服务down掉后,它负责的leader分区会分配到其他的活跃服务中:
以保证集群可以正常运行。
等这个kafka服务恢复后,集群又恢复其原来的状态。
4、 kafka的消息保存在配置的目录中,以文件的形式保存。
每个topic的消息按照一定的负载规则分配到不同的分区中去。各个分区的消息按顺序记录到日志文件中。读取时也按照顺序来读取。
因此,kafka的消息在单个分区中是有顺序的。但对整个topic来说,其消息不一定有序。
若要做到对整个topic有序,则只能设置一个分区。
5、 kafka服务会每隔10分钟删除过期的消息(可配置,一般保留三天,无论消息是否被消费,都会保存)
总结:
1、 kafka健壮性比较高。
zookeeper集群监控kafka服务(zookeeper集群本身健壮性比较高)
kafka服务具有容错特性,只要一个kafka节点存在即可正常运行
消息保存在文件中,不会因为服务器down掉而丢失消息内容
2、 kafka性能比较高
参考:http://blog.csdn.net/hmsiwtv/article/details/46960053
需要压力测试来验证