您的位置:首页 > 其它

Kafaka(分布式发布订阅消息系统)

2015-04-17 16:31 190 查看
http://kafka.apache.org/

目前越来越多的开源分布式处理系统如Apache Storm、Spark都支持与Kafka集成。

组件

Broker

['brəʊkə] n.经纪人

Kafka集群包含一个或多个服务器,这种服务器被称为broker。

Topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。

Partition

每个Topic包含一个或多个Partition。

Producer

生产者,负责发布消息到Kafka broker。

Consumer

消费者,从Kafka broker读取消息的客户端。

Consumer Group

每个Consumer属于一个特定的Consumer Group。

常用类

消费者

kafka.javaapi.consumer.ConsumerConnector

kafka消费者的连接信息。

ConsumerConnector kafka.consumer.Consumer.createJavaConsumerConnector(ConsumerConfig arg0)

创建ConsumerConnector。

Map<String, List<KafkaStream<byte[], byte[]>>> kafka.javaapi.consumer.ConsumerConnector.createMessageStreams(Map<String, Integer> topicCountMap)

根据制定的map创建

kafka.consumer.KafkaStream<byte[], byte[]>

Kafka消息流。

kafka.consumer.ConsumerIterator<byte[], byte[]>

kafka消费者的迭代器。

MessageAndMetadata<byte[], byte[]>

Kafka消息。

byte[] kafka.message.MessageAndMetadata.message()

得到MessageAndMetadata中的信息。

生产者

kafka.javaapi.producer.Producer<Integer, String>

kafka生产者。

kafka.javaapi.producer.Producer.Producer<Integer, String>(ProducerConfig arg0)

Producer的构造函数。

kafka.producer.ProducerConfig

Producer配置。

kafka.producer.ProducerConfig.ProducerConfig(Properties arg0)

ProducerConfig的构造函数。

void kafka.javaapi.producer.Producer.send(KeyedMessage<Integer, String> arg0)

kafka生产者发送消息。

为什么使用

设想这样一个情景:想分析用户在网站上的的浏览行为。这些浏览日志,存数据库浪费,直接存硬盘又怕到时候操作效率低。

此时,消息系统就是一个选择。

消息交付特点

1. kafka对消息的重复、丢失、错误以及顺序没有严格的要求。

2. kafka提供at-least-once delivery,即当consumer宕机后,有些消息可能会被重复delivery。

3. 因每个partition只会被consumer group内的一个consumer消费,故kafka保证每个partition内的消息会被顺序的订阅。

4. Kafka为每条消息为每条消息计算CRC校验,用于错误检测,crc校验不通过的消息会直接被丢弃掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: