加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 经验 > 正文

成为 Kafka 高手的诀窍:生产者深度实践总结

发布时间:2021-06-01 00:24:07 所属栏目:经验 来源:互联网
导读:Client 指的是将会写入消息的多个不同的客户端,这里的客户端是一个抽象化的概念,只要和 kafka server建立了连接,将会写入消息到 kafka 中,无论是否在同一个服务器或者一个进程中,我们都把它称为一个 client。 Broker 指的是加入到了集群里面的服务器

Client 指的是将会写入消息的多个不同的客户端,这里的客户端是一个抽象化的概念,只要和 kafka server建立了连接,将会写入消息到 kafka 中,无论是否在同一个服务器或者一个进程中,我们都把它称为一个 client。

Broker 指的是加入到了集群里面的服务器,这是一个物理层面的机器节点。一台机器上部署了 kafka,并且加入到了 kafka 集群,那么这台机器就是 kafka 集群的一个节点。一般情况下,一台机器只会部署一个 kafka 服务。

Topic 是一个抽象的概念,主要的作用是将用户处理的消息分为不同的类别,同时每个 topic 可以具有 topic纬度的一些配置,比如消息最大大小之类的,topic 下会创建不同数量的 partition 去实际的承载消息,这里值得注意的是 kafka 和 RabbitMQ 不一样的地方,kafka 每创建一个 topic 都会在 broker 上去创建对应数量的 partition,所以 kafka 的 topic 数量是有限的,而且尽量不能太多。

而 RabbitMQ 的 topic 是一个路由概念,创建非常大数量的 topic 并不会实际创建承载的队列,而只是在订阅分发的时候执行不同的路由策略。这是很多从 RabiitMQ 切换到 kafka 的用户比较常见的问题。

Partiotion 是 topic 的分区,用来实际的去承载消息,每个 partition 之间是没有关联的,他们各自有各自的顺序和消息内容,以及记录的 offset。每个生产者的消息都会写入到一个 partition 中去,生产者自己会根据自己的算法去选择 partition 去写入。

Replicas 是 partition 的副本,是物理和概念两个层面的最小单位,它会将自己绑定到 broker上,每个partition 至少都需要有一个 replicas,它是消息实际写入的地方。当 partition 有多个 replicas 的时候,控制器会决定哪一个 replicas 会是 leader。消息始终会被写入到 leader 中,然后 leader 会同步数据到其他为 follower 状态的 replicas 中,所以如上图所示,client 的消息在选中写入到某个 partition 中后,实际上,client 会去连接 replicas leader 所在的 broker,然后把消息写进去。

现在我们开始讲述下关于生产者 API 的使用和一些在生产的时候需要注意的配置,这里的生产者 API 指的是 kafka 提供的几乎无状态的 API,非常的轻便,同时也可以提供非常不错的性能。不过如果使用这个 API 来进行生产,kafka 只保证最少一次和最多一次语义。

最少一次(at-least-once) 也就是说明消息可能重复,如果消息重复,那么消费者需要在消费的时候进行去重。

最多一次(at-most-once) 用的比较少,一般是大量不重要的数据处理的时候,容忍丢失数据的情况下,可以提供比较优秀的性能,生产端生产消息并投递后就不再关注是否成功了,也不会进行重试。

恰好一次(exactly-once) 这个语义在当前这个生产者api中是不提供的,不过由于大量的流式计算系统都需要保证 exactly once semantics,而且 kafka 也推出了kafka stream 这样的流式处理框架,所以后续新版本的 kafka 提供了事物消息来确保恰好一次语义,我们将在本文后续章节讨论这个问题。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读