消息队列 Kafka学习总结

  • 时间:
  • 浏览:0

就是 consumer崩溃了,会有另外一有有4个consumer接着消费消息,它需用从一有有4个离米 的 offset 继续正确处理。这人情况汇报下可不后能 有以下选折 :

broker/ids/[0…N]

第一步查找segment file;

第二步通过segment file查找message;

示例: 查找为offset=368776的message, 如下图所示;

broker/topics/[topic]

partition和consumer 对应好, 平均

1: 八个partition, 八个consumer, (1, 1, 1, 1, 1)

2: 8个 partition, 八个consumer, (2, 2, 2, 1, 1)

3: 八个 partition, 8个consumer, (1, 1, 1, 1, 1, 0, 0, 0)

/consumers/[group_id]/ids/[consumer_id]

最多一次: 消息不必被重复发送,最多被传输一次,但都不 就是 一次不传输;

异步,解耦、削峰

局部保序模式(hash映射)

完正保序模式 (只能一有有4个Partition)

不保序模式(轮训模式)

consumer可不后能 先读归还息,就是 将offset写入日志文件中,就是 再正确处理消息。这指在这人就是 就是 在存储offset后还没正确处理消息就crash了,新的consumer继续从这人offset正确处理很难就会这人消息永远不必被正确处理,这就是 上面说的“最多一次”。

“精确一次”可不后能 通过将提交分为有有4个阶段来正确处理:保存了offset后提交一次,消息正确处理成功就是 再提交一次。就是 还有个更简单的做法:将消息的offset和消息被正确处理后的结果保指在同去;

在segment file中查找:当offset=368776时,依次定位到00000000000000368769.index的元数据物理

RocketMq

JMQ

Kafka是这人高吞吐量的分布式发布订阅消息系统,有如下形态:

每条发布到Kafka集群的消息都不 一有有4个类别,这人类别被称为Topic,实际开发中通过称为队列, topic名称,即叫做Kafka队名称。(物理上不同Topic的消息分开存储,逻辑上一有有4个Topic的消息觉得保存于一有有4个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不须关心数据存于何处);

/consumers/[group_id]/ids

/brokers/ids/[0…N]

离米 一次: 消息不必被漏发送,离米 被传输一次,但都不 就是 被重复传输;

broker id 为3的broker为某个topic提供了有有4个分区进行消息的存储

consumer可不后能 先读归还息,正确处理消息,最后记录offset,当然就是 在记录offset就是 就crash了,新的consumer会重复的消费这人消息,这就是 上面说的“离米 一次”;

精确的一次(Exactly once): 不必漏传输就是 会重复传输,每个消息都传输被一次就是 仅仅被传输一次,这是我们所期望的,就是 很难做到;

/consumers/[group_id]/owners/[topic]/[broker_id-partition_id]

partition物理上由多个segment组成;

当发布消息时,Kafka有一有有4个committed的概念,一旦消息被提交了,假若消息被写入的分区的所在的副本broker是活动的,数据就不必丢失,就是 就是 producer发布消息时指在了网络错误, Kafka现在也没一有有4个完美的正确处理方案;

定位segment file: 其中00000000000000000000.index表示最刚结束了了的文件,起始偏移量(offset)为0.

四层的负载均衡,不常用, 使用zookeeper进行负载均衡, 常 用, 其中partitioner.class 的配置决定了Kafka生产者的负载均衡, 有这人情况汇报:

/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id]

消息消费者,向Kafka broker读归还息的客户端;

每个Consumer属于一有有4个特定的Consumer Group可为每个Consumer指定group name,若不指定group name则属于默认的group, 累似 在电商中发货中心、交易中心分别是有有4个Kafka consumer group。

notify

ActiveMQ(Apache)

Hornet(Jboss)

负责发布消息到Kafka broker;

数据传输的事务定义通常有以下这人级别

Kafka系统架构;

Kafka开发;

Kafka参数调优;

Partition是物理上的概念,每个Topic包含一有有4个或多个Partition;

Kafka集群包含一有有4个或多个服务器,这人服务器被称为broker;

Kafka所有日志文件均存储在server.properties文件配置参数log.dirs下,假设 log.dirs配置为/export/kafka/log/, 同一有有4个topic下有多个不同partition,每个partition为一有有4个目录,目录的命名规范为: topic名称+有序序号,第一有有4个partition序号从0刚结束了了,序号最大值为partitions数量减1,累似 : 一有有4个名为trade为的topic, 有有4个partition, 则在/export/kafka/log/目录下有下面的信息:

trade-0 trade-1 trade-2 trade-3

partition中文件存储措施:每个partion目录离米 一有有4个巨型文件被平均分配到多个大小相等segment数据文件中。但每个段segment file消息数量不一定相等,这人形态方便old segment file快速被删除。每个partiton只需用支持顺序读写就行了,segment文件生命周期由服务端配置参数决定。另一有有4个做的好处就是 能快速删除无用文件,有效提高磁盘利用率, 下面的partition中文件存储措施:

1.一般情况汇报下,根据并发量,一有有4个Kafka集群有3-5台broker机器,阿里是三根业务线7-8台物理机,内存是192G,为了减少消息的堆积,一有有4个topic下128+个Partition, 默认是消费集群机器数量的2-3倍, 累似 线上消费集群是64台,partition建议设置为128 – 192台之间, Note however that there cannot be more consumer instances in a consumer group than partitions.

2.一主多备部署:一有有4个备的broker在和主的broker在同一有有4个机房,另一有有4个备的broker部署在同城的另一有有4个机房, 进一步增加高可靠性.

通过agent定时分发每台主机的syslog信息