88use RdKafka \Producer ;
99
1010/**
11- * @Groups({"Consumer", "ffi", "ext" })
11+ * @Groups({"Consumer"})
1212 * @BeforeClassMethods({"produce10000Messages"})
1313 */
1414class ConsumerBench
@@ -31,6 +31,7 @@ public static function produce10000Messages(): void
3131 * @Warmup(1)
3232 * @Revs(100)
3333 * @Iterations(5)
34+ * @Groups({"ffi", "ext"})
3435 */
3536 public function benchConsume1Message (): void
3637 {
@@ -60,6 +61,7 @@ public function benchConsume1Message(): void
6061 * @Warmup(1)
6162 * @Revs(100)
6263 * @Iterations(5)
64+ * @Groups({"ffi", "ext"})
6365 */
6466 public function benchConsumeCallback1Message (): void
6567 {
@@ -75,7 +77,7 @@ public function benchConsumeCallback1Message(): void
7577 $ callback = new class () {
7678 public int $ messages = 0 ;
7779
78- public function __invoke (Message $ message , ? object $ opaque = null ): void
80+ public function __invoke (Message $ message , $ opaque = null ): void
7981 {
8082 $ this ->messages ++;
8183 }
@@ -88,10 +90,45 @@ public function __invoke(Message $message, ?object $opaque = null): void
8890 }
8991 }
9092
93+ /**
94+ * @Warmup(10)
95+ * @Revs(100)
96+ * @Iterations(5)
97+ * @Groups({"ffi"})
98+ */
99+ public function benchConsumeCallback1MessageWithOpaque (): void
100+ {
101+ $ counter = new stdClass ();
102+ $ counter ->count = 0 ;
103+
104+ $ conf = new Conf ();
105+ $ conf ->set ('metadata.broker.list ' , 'kafka:9092 ' );
106+ $ conf ->set ('auto.offset.reset ' , 'earliest ' );
107+ $ conf ->set ('log_level ' , (string ) 0 );
108+ $ conf ->set ('consume.callback.max.messages ' , (string ) 1 );
109+ $ consumer = new Consumer ($ conf );
110+ $ topic = $ consumer ->newTopic ('benchmarks ' );
111+
112+ $ topic ->consumeStart (0 , 0 );
113+ $ callback = new class () {
114+ public function __invoke (Message $ message , $ opaque = null ): void
115+ {
116+ $ opaque ->count ++;
117+ }
118+ };
119+ $ topic ->consumeCallback (0 , 500 , $ callback , $ counter );
120+ $ topic ->consumeStop (0 );
121+
122+ if ($ counter ->count < 1 ) {
123+ throw new Exception ('failed to consume 1 message ' );
124+ }
125+ }
126+
91127 /**
92128 * @Warmup(1)
93129 * @Revs(100)
94130 * @Iterations(5)
131+ * @Groups({"ffi", "ext"})
95132 */
96133 public function benchConsume100Messages (): void
97134 {
@@ -121,6 +158,7 @@ public function benchConsume100Messages(): void
121158 * @Warmup(1)
122159 * @Revs(100)
123160 * @Iterations(5)
161+ * @Groups({"ffi", "ext"})
124162 */
125163 public function benchConsume100MessagesWithLogCallback (): void
126164 {
@@ -156,6 +194,7 @@ function (Consumer $consumer, int $level, string $facility, string $message): vo
156194 * @Warmup(1)
157195 * @Revs(100)
158196 * @Iterations(5)
197+ * @Groups({"ffi", "ext"})
159198 */
160199 public function benchConsumeBatch100Messages (): void
161200 {
@@ -179,6 +218,7 @@ public function benchConsumeBatch100Messages(): void
179218 * @Warmup(1)
180219 * @Revs(100)
181220 * @Iterations(5)
221+ * @Groups({"ffi", "ext"})
182222 */
183223 public function benchConsumeCallback100Message (): void
184224 {
@@ -194,7 +234,7 @@ public function benchConsumeCallback100Message(): void
194234 $ callback = new class () {
195235 public int $ messages = 0 ;
196236
197- public function __invoke (Message $ message , ? object $ opaque = null ): void
237+ public function __invoke (Message $ message , $ opaque = null ): void
198238 {
199239 $ this ->messages ++;
200240 }
@@ -206,4 +246,38 @@ public function __invoke(Message $message, ?object $opaque = null): void
206246 throw new Exception ('failed to consume 100 messages ' );
207247 }
208248 }
249+
250+ /**
251+ * @Warmup(10)
252+ * @Revs(100)
253+ * @Iterations(5)
254+ * @Groups({"ffi"})
255+ */
256+ public function benchConsumeCallback100MessageWithOpaque (): void
257+ {
258+ $ counter = new stdClass ();
259+ $ counter ->count = 0 ;
260+
261+ $ conf = new Conf ();
262+ $ conf ->set ('metadata.broker.list ' , 'kafka:9092 ' );
263+ $ conf ->set ('auto.offset.reset ' , 'earliest ' );
264+ $ conf ->set ('log_level ' , (string ) 0 );
265+ $ conf ->set ('consume.callback.max.messages ' , (string ) 100 );
266+ $ consumer = new Consumer ($ conf );
267+ $ topic = $ consumer ->newTopic ('benchmarks ' );
268+
269+ $ topic ->consumeStart (0 , 0 );
270+ $ callback = new class () {
271+ public function __invoke (Message $ message , $ opaque = null ): void
272+ {
273+ $ opaque ->count ++;
274+ }
275+ };
276+ $ topic ->consumeCallback (0 , 500 , $ callback , $ counter );
277+ $ topic ->consumeStop (0 );
278+
279+ if ($ counter ->count < 100 ) {
280+ throw new Exception ('failed to consume 100 messages ' );
281+ }
282+ }
209283}
0 commit comments