kafka入门

kafka入门

  • kafka支持多个生产者和多个消费者

多个生产者比较好理解,下面来说说多个消费者

  1. kafka支持多个消费者从一个单独的消息流上读取数据,而且消费者之间互不影响,这种模式我的理解就是发布订阅,所有的客户端都能消费到消息流中的每个消息
  2. 除此之外,kafka也支持多个消费者组成一个群组,它们共享一个消息流,并保证整个群组对每个给定的消息只处理一次,也就是点对点模式,只不过是以群组为单位,群组内的每个消费者还是消费的不同消息而且消息只会被消费一次

kafka常见概念

  这里首先来看看kafka常见的几个概念Broker、Topic、Partition、Producer、Consumer、Consumer Group等
3. Broker: 一个独立的kafka服务器被称为broker
- broker接收生产者的消息,为消息设置偏移量并提交消息到磁盘保存
- broker是集群的组成部分,每个kafka集群都有一个broker同时充当集群控制器的角色,控制器负责将分区分配给broker和监控broker
4. Topic: 在kafka中,消息以**主题(Topic)**来分类,每一个主题都对应一个消息队列
- kafka集群通过分区(Partition)对主题进行横向扩展,所以当有新的broker加入集群,为了能让分区分布到集群所有broker上,主题分区个数必须要大于broker的个数
- kafka为新创建主题提供了很多默认参数,num.partitions参数指定新创建的主题包含多少个分区,默认是1;如果主题只有一个分区,很显然就只能由一个broker处理,这样吞吐量大大下降
5. Partition:分区,在kafka中主题是可以再进行分区的
- 分区也是有首领,所有的读写消息请求由首领复制处理,别的分区只负责复制首领分区,以备容灾
6. Producer: kafka的生产者负责往kafka写入消息
- 发送消息方式
- 同步发送消息,生产者发送消息给kafka并等待返回结果
- 异步发送消息,生产者(应用程序)发送消息即可,无需等待,生产者提供回调对异常情况进行处理
- 生产者参数之acks
- acks参数指定必须要有多少个分区副本收到消息
- acks=0,表示生产者写入消息不需要等待服务器的响应,也就是服务器没收到,生产者也不知道,典型的生产者丢消息,不过吞吐量很高
- acks=1,只要集群的首领节点收到消息,生产者就会收到服务器的成功响应,缺点是如果首领节点收到消息崩溃了,这个消息还是丢了
- acks=all, 只有当所有参与复制的节点全部收到消息时,生产者才会收到服务器的成功响应。延迟最高
7. Consumer:消费者负责从kafka读取消息并消费
- 假设主题T1有4个分区,我们创建消费者C1,它是群组G1里唯一消费者,那么它订阅主题T1后会受到4个分区全部消息
- 如果在G1里新增一个消费者C2,那么C1和C2将分别收到两个分区消息;如果G1有四个消费者,那就每个消费者可以分配到一个分区;如果群组消费者数量大于分区数,那多余的消费者会闲置
8. Consumer Group:消费者从属于消费者群组,如上面的G1,群组里的消费者订阅的是同一个主题
- 加入有多个应用程序订阅同一个主题,那么每个应用程序会有自己的消费者群组。
- 在上面的例子中新加一个消费者群组G2,那G2将从主题T1上接收所有消息,并群组G1互不影响,G2里也可以拥有随意多个消费者,分区消费分配方式同G1

kafka常见问题

  1. 如何保证消息队列高可用
  2. 如何保证消息不被重复消费
  3. 如何保证消息的可靠性传输
  4. 如何保证消息的顺序性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值