I think this one might be the simplest:
both in terms of node count, and in ease of explanation:
- Create a hex grid.
- Populate it with Cylinders with Vertices set to 6 to make them hex shaped.
- Assign a random value to the Cylinder Scale.
You need a combine XYZ node that only randomizes X and Y if you want the cylinders all on the same base height.
I think that joining two grids that are offset is a bit of a cheat, but it does give you a good hex pattern; and all of this in just six nodes. (7 if you want the cylinder bases at the same height.)
To answer a question in the comments, here's how to parameterize the grid size. Note that this version has the change to support the cylinders all sharing a base height as well.
Also note that this group would support the ability to color the sides and tops differently if you added these nodes:
Thanks to Markus von Broady for the comment correcting my material handling.