一、什么是kafka:
Kafka 是一种高吞吐量的分布式发布订阅消息系统。
Scala编写的。
二、kafka的特点:
* 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
* 高吞吐量[2] :即使是非常普通的硬件Kafka也可以支持每秒数百万[2] 的消息。
* 支持通过Kafka服务器和消费机集群来分区消息。
*支持Hadoop并行数据加载
三、kafka的优缺点:
优点 :
1、分布式可高可扩展。Kafka 集群可以透明的扩展,增加新的服务器进集群。
2、高性能。Kafka 的性能大大超过传统的ActiveMQ、RabbitMQ等MQ 实现,尤其是Kafka 还支持batch 操作。
3、容错。Kafka每个Partition的数据都会复制到几台服务器上。当某个Broker故障失效时,ZooKeeper服务将通知生产者和消费者,生产者和消费者转而使用其它 Broker。
4、支持Scala、Java、C++、C#、Go、PHP、Python、Ruby,PHP需要5.3.3版本以上。
5、没有消费反馈,哪些消息已消费由consumer维护(通过记录一个offset值),consumer也可以回滚到以前的位置,重新读取之前读取过的消息。
6. producer发送消息后,broker不会发送ACK给producer。
缺点:
1、 重复消息。Kafka 只保证每个消息至少会送达一次,虽然几率很小,但一条消息有可能会被送达多次。
2、消息乱序。虽然一个Partition 内部的消息是保证有序的,但是如果一个Topic 有多个Partition,Partition 之间的消息送达不保证有序。
3、复杂性。Kafka需要zookeeper 集群的支持,Topic通常需要人工来创建,部署和维护较一般消息队列成本更高
四、kafka的使用场景:
1、Messaging
对于一些常规的消息系统,kafka是个不错的选择;partitons/replication和容错,可以使kafka具有良好的扩展性和性能优势.不过到目前为止,我们应该很清楚认识到,kafka并没有提供JMS中的"事务性""消息传输担保(消息确认机制)""消息分组"等企业级特性;kafka只能使用作为"常规"的消息系统,在一定程度上,尚未确保消息的发送与接收绝对可靠(比如,消息重发,消息发送丢失等)
2、Websitactivity tracking
kafka可以作为"网站活性跟