kafka的并行度与JStorm性能优化

kafka的并行度与JStorm性能优化

> Consumers

Messaging traditionally has two models: queuing and publish-subscribe. In a queue, a pool of consumers may read from a server and each message goes to one of them; in publish-subscribe the message is broadcast to all consumers. Kafka offers a single consumer
abstraction that generalizes both of these—the consumer group.

Consumers label themselves with a consumer group name, and each message published to a topic is delivered to one consumer instance within each subscribing consumer group. Consumer instances can be in separate processes or on separate machines.

If all the consumer instances have the same consumer group, then this works just like a traditional queue balancing load over the consumers.

If all the consumer instances have different consumer groups, then this works like publish-subscribe and all messages are broadcast to all consumers.

More commonly, however, we have found that topics have a small number of consumer groups, one for each "logical subscriber". Each group is composed of many consumer instances for scalability and fault tolerance. This is nothing more than publish-subscribe semantics
where the subscriber is cluster of consumers instead of a single process.

> Kafka has stronger ordering guarantees than a traditional messaging system, too.....

> Kafka does it better. By having a notion of parallelism—the partition—within the topics, Kafka is able to provide both ordering guarantees and load balancing over a pool of consumer processes. This is achieved by assigning the partitions in the topic to the
consumers in the consumer group so that each partition is consumed by exactly one consumer in the group. By doing this we ensure that the consumer is the only reader of that partition and consumes the data in order. Since there are many partitions this still
balances the load over many consumer instances. Note however that there cannot be more consumer instances than partitions.

Kafka only provides a total order over messages within a partition, not between different partitions in a topic. Per-partition ordering combined with the ability to partition data by key is sufficient for most applications. However, if you require a total order
over messages this can be achieved with a topic that has only one partition, though this will mean only one consumer process.

我们经常用的是发布-订阅方式。消费者端可以组成一个组,共同消费一个topic。kafka 中topic的消息每一个消息只能被消费者组中的一个消费者消费,可以把消费者组的消费者个数当作线程数目,多个线程消费某一topic消息。消费者实例可以在不同机器上的不同进程内。

如果某一topic的所有消费者实例都有相同的消费组名,它们的工作方式类似与传统的队列。

如果某一topic的所有消费者实例有各自不同的消费组名,它们的工作方式类似与发布-订阅,所有的消息广播给 所有消费者。

为什么采用消费组的形式呢,文档也给出了答案:for scalability and fault tolerance。

kafka的并行度---分区(the partition),

文档指出:某一topic的消息的每个分区(partition)被一个消费组中的一个消费者消费,可以确保消费者消费的顺序。

Note however that there cannot be more consumer instances than partitions.不要使得消费组中消费者实例数目多于分区数目,相等最好。

JStorm中,spout是拓扑图中的入口点,如果这个入口流量小了,整个拓扑中的瓶颈那应该是入口了。所以,我们在JStorm中,kafkaSpout要提高并发度,设置kafkaSpout实例数目,设置的实例数目要和kafka分区的数目相等,我们随时调整分区数目及kafkaSpout实例数目,观察性能瓶颈存在否。

版权声明:本文为博主原创文章,未经博主允许不得转载[http://blog.csdn.net/doctor_who2004]。

时间: 2024-10-12 06:12:14

kafka的并行度与JStorm性能优化的相关文章

漫游Kafka设计篇之性能优化

Kafka在提高效率方面做了很大努力.Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作.读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也尽量使读的操作更轻量化. 我们之前讨论了磁盘的性能问题,线性读写的情况下影响磁盘性能问题大约有两个方面:太多的琐碎的I/O操作和太多的字节拷贝.I/O问题发生在客户端和服务端之间,也发生在服务端内部的持久化的操作中.消息集(message set)为了避免这些问题,Kafka建立了“消息集(mess

Apache kafka性能优化架构分析

应用程序优化:数据压缩 consumer offset默认情况下是定时批量更新topics的partitions offset值 Apache kafka性能优化架构分析

storm性能优化

Storm 性能优化 目录 场景假设 调优步骤和方法 Storm 的部分特性 Storm 并行度 Storm 消息机制 Storm UI 解析 性能优化 场景假设 在介绍 Storm 的性能调优方法之前,假设一个场景:项目组部署了3台机器,计划运行且仅运行 Storm(1.0.1) + Kafka(0.9.0.1) + Redis(3.2.1) 的小规模实验集群,集群的配置情况如下表: | 主机名 | 硬件配置 | 角色描述 ||: ---------------- :|: ----------

从12306的崩溃,说说我们怎么去做性能优化?

开篇语 最近12306又崩溃了一次,但其实12306这样的体量跟我们平常接触的架构基本没什么太大的关系. 话又说回来,12306也是由一个个小功能组成的. 做好自己的小蚂蚁,就能让大部队变得更快. 因为跟数据库.数据仓库.查询打交道比较多,所以我就简单说一下数据查询的优化过程吧. 不客气地说,在性能优化中,其实80%的问题都是源于数据查询. 以下步骤是以优化代价.数据量级为衡量,从低到高开始,步步进推. GO (1)如果数据查询缓慢,80%的原因都是因为SQL.先找出慢SQL,以Oracle为例

Spark性能优化指南——高级篇

Spark性能优化指南--高级篇 [TOC] 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题. 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数tas

Web性能优化:What? Why? How?

转:http://www.cnblogs.com/dojo-lzz/p/4591446.html 为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据著名的`2-5-8`原则: 当用户在2秒以内得到响应,会感觉系统的响应非常快 当用户在2-5秒之内得到响应,会感觉系统的响应速度还可以 当用户在5-8秒之内得到响应,会感觉系统的响应非常慢,但还可以接受

王家林谈Spark性能优化第一季!(DT大数据梦工厂)

内容: 1.Spark性能优化需要思考的基本问题: 2.CPU和Memory: 3.并行度和Task: 4.网络: ==========王家林每日大数据语录============ 王家林每日大数据语录Spark篇0080(2016.1.26于深圳):如果Spark中CPU的使用率不够高,可以考虑为当前的程序分配更多的Executor,或者增加更多的Worker实例来充分的使用多核的潜能. 王家林每日大数据语录Spark篇0079(2016.1.26于深圳):适当设置Partition分片数是非

oracle 性能优化--索引总结

索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成.上级索引块包括下级索引块的索引数据,叶节点包括索引数据和确定行实际位置的rowid. 使用索引的目的: 加快查询速度 降低I/O操作 消除磁盘排序 何时使用索引: 查询返回的记录数 排序表<40% 非排序表 <7% 表的碎片较多(频繁添加.删除) 索引的种类 非唯一索引(最经常使用) 唯一索引

Kafka 协议实现中的内存优化【转】

Kafka 协议实现中的内存优化 Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见于 A Guide To The Kafka Protocol Request 除了 Size+ApiKey+ApiVersion+CorrelationId+ClientId 这些固定字段, 额外的 RequestMessage 包含了具体请求数据: Request => Size ApiKey Ap