I would state that calling the poll(timeout) has the downside that it reads and waits for messages to be produced, until the poll limits are reached.
Example: Read the offset of the last message in the partition, seek to that position, then call poll(30s).
If the partition has 1000 more records meanwhile, the poll will return quickly. If the partition does not get any new messages, the poll will wait for 30 seconds for new data.
Setting max.poll.records=1 does not help.
The maximum number of records returned in a single call to poll(). Note, that max.poll.records does not impact the underlying fetching behavior.
The setting fetch.max.bytes=0 should do the trick, however.