最近在用 kafka 实在有点懵逼
之前用的是 https://github.com/weiboad/kafka-php 一直用的 0.1.x 版本,今天发现升级到了 0.2.x 版本,之前一直作为 producer 推送没有任何问题,但是 comsumer 消费一直提示 timeout,errcode -7。
一直不太明白 kafka 的实现原理,时间也不允许慢慢抠,有没有大哥帮忙稍微讲解一下~
1
lovedebug 2017-05-03 11:33:09 +08:00 1
kafka 的官方文档十分的详细,已经到发指了。另外不想看英文的网上有很多中文版的文档啊。
kafka 可以视作中间件,消息队列,客户端,服务端,完全看你怎么用。 zookeeper 用于分布式管理的。 |
2
lml12377 OP @lovedebug 上面那个 git,0.1.x 版本消费者是强制装 zookeeper.so 扩展的,这个扩展是什么目的啊? zk 不是用来给 kafka server 做负载的吗?为啥我客户端还要装这个扩展啊? kafka 不是基于 tcp 连接的吗,那我 socket 能连上去原则上就能用了啊
|
3
billlee 2017-05-03 12:40:25 +08:00 1
kafka 的 comsumer 比较复杂,有 group/partition 等概念,如果挂了需要重新分发消息什么的,需要要维护状态,依赖 zookeeper.
Producer 就简单多了,挂了就挂吧,又不影响其他组件。 |
4
k9982874 2017-05-03 13:13:05 +08:00 1
印象中 zookeeper 好像是用来在 leader 挂掉以后选举新 leader 时用
|
5
sampeng 2017-05-03 13:17:20 +08:00 2
1.zk 不用理解太复杂,理解成一个云里的配置文件就好。这个配置文件发生任何变化,所有观察者都马上能知道。其他的什么分配原理,如果有时间再去深入即可。
2.答案是是。但是和 zk 配合后就不是传统 cs 的概念,是一个无中心系统。任何一个节点都能提供服务。至于怎么发现的,通过 zk。php 连上的后的角色是看你做什么,不是简单的概念,你要拉,你就是 comsumer。你要推,就是 producer。 3.librdkakfa 应该是 native 写的扩展。php 没有扩展就不能做 socket 操作了?只是没长连接而已。。。。 |
7
Fishdrowned 2017-05-03 22:54:39 +08:00 via Android 1
kafka consumer 0.8 和 0.9 不兼容。如果你服务端是 0.8 那只能用 weiboad/kafka-php 0.1.x。
librdkafka 0.3 以上才支付 php7。 版本兼容,这个到处都充满恶意的世界 |