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

http://kafka.apache.org/

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

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

1.组件

Broker
['brəʊkə] n.经纪人
Kafka集群包含一个或多个服务器,这种服务器被称为broker。
Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。
Partition
每个Topic包含一个或多个Partition。
Producer
生产者,负责发布消息到Kafka broker。
Consumer
消费者,从Kafka broker读取消息的客户端。
Consumer Group

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

2.常用类

2.1消费者

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中的信息。

2.2生产者

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生产者发送消息。

3.消息交付特点

1. kafka对消息的重复、丢失、错误以及顺序没有严格的要求。
2. kafka提供at-least-once delivery,即当consumer宕机后,有些消息可能会被重复delivery。
3. 因每个partition只会被同一consumer group内的一个consumer消费,故kafka保证每个partition内的消息会被顺序的订阅。

4. Kafka为每条消息为每条消息计算CRC校验,用于错误检测,crc校验不通过的消息会直接被丢弃掉。

5.增减consumer,broker,partition会导致rebalance,所以rebalance后consumer对应的partition会发生变化。

4. partition 的个数考虑

a) 如果consumer比partition多,是浪费,因为kafka的设计是在一个partition上是不允许并发的,所以consumer数不要大于partition数。
b) 如果consumer比partition少,一个consumer会对应于多个partitions,这里主要合理分配consumer数和partition数,否则会导致partition里面的数据被取的不均匀。

5.带弄懂

a)server怎么标识不同的consumer?是zk自己分配编号,还是consumer构造函数的参数指定?

b) 何为一个consumer?进程还是线程还是别的什么?

c)consumer所在机器性能低,个数与partition个数一致还是消费不充分怎么办?

时间: 2025-01-30 10:12:55

Kafka(分布式发布订阅消息系统)的相关文章

Apache Kafka是分布式发布-订阅消息系统

转自: http://www.infoq.com/cn/articles/apache-kafka?utm_source=infoq&utm_medium=popular_links_homepage 简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交日志服务. Apache Kafka与传统消息系统相比,有以下不同: 它被设计为一个分布式系统,易

一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)

1:KafKa的官方网址:http://kafka.apache.org/ 开发流程图,如: 2:KafKa的基础知识: 2.1:kafka是一个分布式的消息缓存系统2.2:kafka集群中的服务器都叫做broker2.3:kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接2.4:kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载2.

雅虎开源发布/订阅消息平台Pulsar

雅虎发布了其发布-订阅消息平台Pulsar,这个平台在他们内部已经用在了多项服务的生产环境之中. 按照雅虎的说法,Pulsar是一个低延迟的发布/订阅消息系统,它可以进行水平扩展,跨多个主机和数据中心.雅虎从2015年第二季度开始,就一直在邮件.财经.Gemini Ads.Sherpa(雅虎的分布式key-value服务--译注)以及体育相关的功能中使用Pulsar.通过将其开源,他们希望Pulsar能够与其他开源项目进行集成,从而促使它得到广泛的应用.雅虎已经将Pulsar部署到了十个以上的数

RabbitMQ 2.6.0发布 企业消息系统

RabbitMQ 2.6.0本次发行的一大亮点是引入主动-主动HA,及队列在集群节点之间的复制.还有许多其他的改进,尤其是管理和重载插件程序,以及许多的错误修正. RabbitMQ是一个AMQP的实现,是高性能企业消息的新兴标准. RabbitMQ服务器是基于一个可靠的平台,Erlang/OTP,提供极高的可靠性,可用性和可伸缩性.它提供了良好的吞吐量和延迟性能,是可预测的和相容的.结构紧凑,易于维护的代码库,促进快速定制和部署. RabbitMQ的发行还包括一个Java客户端,与任何兼容的AM

发布订阅-消息队列如activmq、redis等,支持按模式匹配订阅者,却不支持按模式发布消息?

问题描述 消息队列如activmq.redis等,支持按模式匹配订阅者,却不支持按模式发布消息? 消息队列如activmq,rabbitmq,redis等,支持按模式匹配订阅者,但只支持简单的*号?号等,为什么不支持正则表达式? 为什么发布者发布消息时,不能按模式发布? 求大神指点....

Apache Kafka 0.8.2.1 发布,消息发布订阅系统

Apache Kafka 0.8.2.1 发布,该版本修复了 4 个关键 bug: [KAFKA-1919] - Metadata request issued with no backoff in new producer if there are no topics [KAFKA-1952] - High CPU Usage in 0.8.2 release [KAFKA-1971] - starting a broker with a conflicting id will delete

《Spark大数据分析:核心概念、技术及实践》一1.4 消息系统

  本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1.4节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 1.4 消息系统 数据通常从一个应用流向另一个.一个应用产生数据,而后被一个或多个其他应用使用.一般来讲,生成或发送数据的应用叫作生产者,接收数据的则叫作消费者. 有时候,产生数据的应用数量和使用数据的应用数量会出现不对称.比如,一个应用可以产生数据,而后被多个消费者

分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载

一.分布式消息总线      在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用的程序之中写数据库轮循代码,这样就会产品一个很严重的两个问题,第一个问题是延迟,轮循机制要定时执行,必须会引起延迟,第二个问题是数据库压力过大,当进行高频度的轮循会生产大量的数据库查询,并且如果有大量的使用者进行轮循,那数据库的压力就更大了.      那么在这个时间,就需要一套能支持发布

消息队列中点对点与发布订阅区别(good)

背景知识 JMS一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914).2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1. Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. 点对点与发布订阅最初是由JMS定义的.这两种模式主要区别或解决的问题就是发送到队列的消息能否重