123
返回列表 发新帖
楼主: 836195369
跳转到指定楼层
上一主题 下一主题
收起左侧

[经验总结] 系统设计|Kafka相关!

   
全局:
四次context Switch哈

每次user 转kernel 还得转回来  所以算两次
回复

使用道具 举报

🔗
rxTByjroA2h3 2021-5-21 03:47:21 | 只看该作者
全局:
tiancaihb 发表于 2021-5-20 17:30
不知道整个业界的情况,感觉为了让这么一个很底层的系统高可用,需要有一些运营的经 ...
immutable db
回复

使用道具 举报

🔗
TB2020 2021-5-21 04:52:19 | 只看该作者
全局:
写的不错!不过面试时候大部分人并不关心kafka为何比其它一些产品快,更多的是exactly once的解决
回复

使用道具 举报

🔗
 楼主| 836195369 2021-5-21 05:01:46 | 只看该作者
全局:
问题:
1. 组成集群以后一般瓶颈会出现在哪呢?
@tiancaihb: (10楼)hot shard,因为本来partition之间是独立的,如果平均分message,就是embarrassingly parallel。另外partition多到一定程度,维护metadata,以及网络连接数。

我的理解:
集群中有一个环节是partition的备份,一个partition会被复制成你设置的参数个 并同步给每一个分布的broker。这个环节如果我没有记错的话,走的路线跟consumer消费任务是差不多的(我忘记在哪个论坛或者教程里看到的了,具体忘记了,如果有大佬发现这个有问题请通知我)。所以代价就是集群太多了的时候,加一个减一个broker或者加一个减一个topic,都需要很大的网络花销去做备份。另外老版本kafka中 zookeeper也会成为瓶颈,但是现在应该不会了。据我所知,现在的版本中zk已经不管kafka内部逻辑了,只管配置(新版本即将删除zk依赖)。

2. 低延迟是一个硬指标吗?
latency不是主要的,最主要是要吞吐量大,另外我个人认为latency并不算kafka优势,因为生产者可以定期批量生产消息。这里涉及到一个参数,叫log.flush.interval,可以设置多久将数据刷新到磁盘或者每多少条消息刷新到磁盘。注意,只有消息被刷新到磁盘了,才能被broker发送出去。
回复

使用道具 举报

🔗
 楼主| 836195369 2021-5-22 10:17:05 | 只看该作者
全局:
客户端Producer 相关问题:
前言:实现一个简单的kafka客户端,需要做两步。首先,初始化一个KafkaProducer(假设叫做producer);然后,调用producer.send()去发送消息。

1. 当初始化KafkaProducer时,除了会初始化一堆配置(比如partition的配置,监控的配置,负载均衡的配置等等),重要的是还会初始化一个叫RecordAccumulator(顾名思义)的东西,并且还会创建一个负责发送消息的deamon thread(守护线程)。由于这个负责发送的守护线程是在初始化producer时候创建的,因此我们可以认为,producer是线程安全的。
2. send的流程是:首先计算消息要到哪个partition,然后组建callback对象,随后(重要的来了)往那个RecordAccumulator上append记录。当RecordAccumulator积累到配置的数量时,由初始化producer时创建的那个负责发送消息的守护进程发送出去。
3. 发送过程是异步的,返回的都是future对象,这个future对象甚至都不需要去管。
4. Producer会把消息发送到leader broker上。所有的数据都奔着leader节点去。

结论:
producer不会拿到一条消息就去发送一条,而是会累积到一定值后由守护线程去统一发送。这也是kafka之所以能高吞吐量的底层逻辑之一。
欢迎大家继续补充producer有关内容,也请各位同学给补充的或者回答问题的大佬加大米!

那么producer是怎么保障消息传送的呢?请听下回分解。
回复

使用道具 举报

🔗
jessicaz12 2023-9-28 16:03:03 | 只看该作者
全局:
非常好的分享,赞
回复

使用道具 举报

全局:
谢谢分享。

从kafka.apache.org上看到的。
"Kafka is a distributed system consisting of servers and clients that communicate via a high-performance TCP network protocol. "

"Kafka uses a binary protocol over TCP."

"The client initiates a socket connection and then writes a sequence of request messages and reads back the corresponding response message. No handshake is required on connection or disconnection. TCP is happier if you maintain persistent connections used for many requests to amortize the cost of the TCP handshake, but beyond this penalty connecting is pretty cheap."

这我就不懂了,TCP是要求handshake的。
但是文中又说"No handshake is required on connection or disconnection. “
回复

使用道具 举报

🔗
 楼主| 836195369 2023-10-12 13:31:46 来自APP | 只看该作者
全局:
eagletang 发表于 2023-10-11 22:10:59
谢谢分享。

从kafka.apache.org上看到的。
你这个问题非常非常好。这里的handshake并不是tcp的那个三次handshake,而是应用层的一些handshake(比如https那些关于证书的交换),既然用了tcp,那tcp那三次是必然会有的。
回复

使用道具 举报

全局:
836195369 发表于 2023-10-11 22:31:46
你这个问题非常非常好。这里的handshake并不是tcp的那个三次handshake,而是应用层的一些handshake(比如https那些关于证书的交换),既然用了tcp,那tcp那三次是必然会有
你说的对。应该指的是HTTPS的TSL handshake,而不是TCP的3 way handshake。不过他们的表述有问题。
谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表